我是靠谱客的博主 哭泣大碗,最近开发中收集的这篇文章主要介绍C语言strlen使用误区【坑在for循环语句】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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

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

#include<stdio.h>
#include<string.h>
int main(){
char s[]="23";
char t[]="1";
printf("%dn",strlen(t)-strlen(s));
for(int i=0;i<strlen(t)-strlen(s);i++)
printf("succeed");
return 0;
}

这个主函数运行起来如果不关掉可能要一些时间

       问题来了,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<strlen(t)-strlen(s);i++)】这个语句里,先运算strlen(t)-strlen(s),因为这两个都是无符号整型,所以结果的类型就是无符号整型,也就是4294967295,i的最大值是2147483647,再加1就变成-2147483648,所以会一直循环下去。

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

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

最后

以上就是哭泣大碗为你收集整理的C语言strlen使用误区【坑在for循环语句】的全部内容,希望文章能够帮你解决C语言strlen使用误区【坑在for循环语句】所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部