C语言 strlen(int),C语言 - strlen函数及int,char转换问题

博客探讨了C语言中数组与strlen函数的关系。代码示例显示,当将int型值转换并存储到char型数组中,超过char类型取值范围后,数据会发生截断。由于strlen函数遇到0值时停止计数,因此对于包含超出范围值的数组,strlen返回的长度并非数组大小。通过分析,得出strlen(a)的结果为255,而非1000。
摘要由CSDN通过智能技术生成

题目

intmain()

{

inti;

chara[1000];

for(i=0;i<256;i++)

a[i]=i+1;

printf("len = %d\n",strlen(a));

printf("size = %d\n",sizeof(a));

return0;

}

输出结果:___ ___。

这题目咋一看没啥难度,答案是1000,1000!!!是,sizeof(a)为1000这应该是没什么争议,但如果你认为strlen(a)也是1000的话,那么你可能对strlen函数及C语言类型转换认识还不深刻,正确答案应该是255,为什么呢?下面我们进行分析。

代码分析

我们知道,在大多数编译器中,C语言的char类型占一个字节(Byte),取值范围是-128~127,而int类型则占4个字节。

从上面的代码我们可以看到定义的数组a是char型,i是int型,那么a[i] = i + 1就包含了将每次i+1的结果(int型)转换为char型,再存入数组。

因为char型的取值范围为-128~127,int型的范围要比char型大得多,所以a[0]到a[126]存放的即是1-127,到a[127]时,已经超出了char型能取值的范围,根据类型转换原理(数据占用字节扩充或者截断),我们可以知道a[127]是-128,验证一下:

intmain()

{

inti;

chara[1000];

for(i=0;i<256;i++)

a[i]=i+1;

printf("%d\n",strlen(a));

printf("%d\n",a[126]);

printf("%d\n",a[127]);

printf("%d\n",a[128]);

printf("%d\n",a[255]);

return0;

}

运行上述代码,结果如下所示:

我们可以看到,确实a[127]为-128,而a[128]为-127,那么据此我们很清晰就可以知道,到a[255]时,其值应该为0。此时再根据strlen函数的原理:碰到数值0返回计数值(不包含0),所以答案255是怎么来的,分析到这里,相信大家应该都清楚了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值