关于字符数组和字符型指针定义的字符串长度问题

用sizeof和strlen来度量字符串所占字节数字符串长度的测试

Printf(“%ld %ld\n”, sizeof(test), strlen(test));

Char *test1 = “nihao”;                //85

Char test2[] = “nihao”;                //65

Char test3[20] = “nihao”;            //205

Char test4[20];                            //200

 

Sizeof(test1) = 8;   //此时8代表的是char指针变量类型的长度是8字节64位

Strlen(test1) = 5;   //此时代表的是字符串的长度

Sizeof(test2) = 5; //此时字符数组的长度就是字符串的长度

Strlen(test2) = 6;   //此时包含了‘\0’字符串结尾标志长度为6

 

Sizeof原理:sizeof表示的是当前变量所占的内存空间包括\0,但是当使用char str[] = {‘n’, ‘I’, ‘h’, ‘a’,‘o’};这样的字符数组的时候sizeof(str) == 5;

Strlen原理 strlen 表示的是当前字符串的长度,也就是不包括\0的长度,当逐位审查字符串的时候遇到字符串结尾标识\0的时候返回,不包括\0,其中空格,tab,换行符都不是\0;

sizeof(“nihao\n”)== sizeof(“nihao\t”) == sizeof(“nihao “) == 7;

实际上数组是一种数据类型,并不是简单的连续的空间,是有类型记录的,当数组作为形参传递给函数的时候,会退化为字符型指针,虽然可以用数组的方法使用malloc申请的连续堆空间,并且不会报错,但是数组和连续的空间是有区别的,特别当字符型指针作为形参代替数组作为形参,往往会报错。


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值