标题:fgets中使用sizeof和strlen的区别
只看楼主
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
结帖率:93.75%
已结贴  问题点数:10 回复次数:3 
fgets中使用sizeof和strlen的区别


在fgets()中使用strlen为什么不能得到字符串的长度,而是到空格就截止了。
而在可以使用strlen读取程序中字符串的长度,直到结束位置截止。
是由于操作系统和文件默认编码方式不同导致的空格编码方式不同导致的么?
搜索更多相关主题的帖子: strlen sizeof 区别 fgets 不同 
2019-12-22 00:04
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
strlen()函数用来计算字符串的长度,其原型为:
    unsigned int strlen (char *s);
s为指定的字符串。
strlen()用来计算指定的字符串s 的长度,不包括结束字符"\0"。
返回字符串s 的字符数。
注意一下字符数组,例如
    char str[100] = "http://see.xidian.
定义了一个大小为100的字符数组,但是仅有开始的11个字符被初始化了,剩下的都是0,所以 sizeof(str) 等于100,strlen(str) 等于11。
如果字符的个数等于字符数组的大小,那么strlen()的返回值就无法确定了,例如
    char str[6] = "abcxyz";
strlen(str)的返回值将是不确定的。因为str的结尾不是0,strlen()会继续向后检索,直到遇到'\0',而这些区域的内容是不确定的。
注意:strlen() 函数计算的是字符串的实际长度,遇到第一个'\0'结束。如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止。而sizeof返回的是变量声明后所占的内存数,不是实际长度,
2019-12-22 10:13
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:0 
回复 2楼 自学的数学
你说的这些我都是知道的,但是怎么用你回答的内容解决我说的这个现象。
那为什么我将字符串放到文件里strlen(a)返回的是空格前的字符长度,而将字符串放到数组中,strlen(a)返回的是字符总长度。strlen(a)在读取文件内容和数组内容时有什么不同么?
当fgets(a,strlen(a),fp);时,strlen(a)时,strlen读取数组a里面的内容是什么,为什么会导致读取不全的问题?

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-12-23 14:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
第二段代码中 a 没有赋值,因此 strlen(a) 是未定义行为
2019-12-23 14:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498546-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.063629 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved