C语言strlen使用误区【坑在for循环语句】

头文件string.h里有个strlen函数相信大家都不陌生,都觉得自己会用,但是有时也会坑了自己。举个例子

#include
#include
int main(){
	for(int i=0;i<-1;i++)
		printf("succeed");
	return 0;
}

这个函数运行好是没结果的,再看下面一个

#include
#include
int main(){
	char s[]="23";
	char t[]="1";
	printf("%d\n",strlen(t)-strlen(s));
	for(int i=0;i

这个主函数运行起来如果不关掉可能要一些时间C语言strlen使用误区【坑在for循环语句】_第1张图片

       问题来了,strlen(t)-strlen(s)=-1,和第一个程序如出一辙,为什么结果差这么多?                                                                         

我去查了一下strlen这个函数,发现他的返回值是unsigned int,就是无符号整型(通俗说就是非负整数),两个无符号整型相减得到负数,但是我们平常打印出来都是-1【例如:printf("%d",strlen(t)-strlen(s))】,这就和我的一些习惯有关系了,我一直把无符号整型当整型用,毕竟字符串长度怎么会是负数。                                                                                                                       

但实际上,正确打印无符号整型的语句应该是【printf("%u",strlen(t)-strlen(s))】,而这样的结果就是4294967295【unsigned int的最大值】。                                                                                                                                                                                       

这下就能解释通了,【for(int i=0;i

       这个事告诉我,要时常留意使用的函数的返回值的类型,不然哪会在这里翻了船,用【printf("%d",strlen(t)-strlen(s))】输出是-1,但是for循环却一直做,for里面一大堆代码,你怎么可能想得到是这里出了问题呢?

      最后附张修改方案及结果图,vx:qczsbwjzjn。欢迎交流:)

C语言strlen使用误区【坑在for循环语句】_第2张图片

 

 

你可能感兴趣的:(bug反思)