我是靠谱客的博主 朴素母鸡,最近开发中收集的这篇文章主要介绍C语言中strlen方法的陷阱,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在用strlen时遇到挺郁闷的问题,用strlen求字符数组的长度时总是不对,google了一下才发现忽略了其中的一些细节。

int main() {
char a[5]="AABCD";
char b[4]="CDAA";
int len = strlen(a);
printf("%dn",len);
}

在我的机器上执行结果总是26,但明显应该是5,why?看了下strlen的源码才明白,strlen判断字符串长度时是以''为界的,也即strlen碰到''时才会认为字符串结束了。
我们知道,字符串常量是以''为结尾的,而上面将字符串常量“AABCD”赋给a数组时,恰恰丢掉了结尾的'',以至于判断到'D'的下一位发现不是''进而继续判断。所以,在判断字符串常量时是不会出错的,若非要判断字符数组的长度,就需要注意了。

这其中还有一个陷阱,看下面的语句:
int main() {
char *s = "hello";
int len = strlen(s);
printf("%dn",len);
printf("%dn",strlen(s)-7);
printf("%udn",strlen(s)-7);
printf("%dn",strlen(s)>7);
printf("%dn",strlen(s)-7>0);
}

在我机器上的执行结果如下:
5
-2
4294967294d
0
1

可能在最后的两个结果有疑问,这种逻辑放在平常感觉没什么不一样,这里为什么会不一致呢?看一下strlen的原型也就明白了
size_t strlen(const char *string);

其中在string.h中说明了size_t是在stddef.h中定义的。我机器的stddef.h中定义size_t为无符号整型,而无符号与有符号的运算结果还是无符号的。这也就解释了为什么最后一个结果判断为真,因为-2的无符号整型值大于0。

最后

以上就是朴素母鸡为你收集整理的C语言中strlen方法的陷阱的全部内容,希望文章能够帮你解决C语言中strlen方法的陷阱所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部