c语言数组课后作业求助
#include <stdio.h>#define MAX 1024
int main()
{
char str;
char *target = str;
int length = 0;
printf("请输入一个字符串:");
fgets(str, MAX, stdin);
while (*target++ != '\0')
{
length++;
}
printf("您总共输入了 %d 个字符!\n", length - 1);
return 0;
}
为什么最后length要-1 哈哈,这个问题其实很简单的,fgets会在读到回车时自动结束并在后面加一个'\0',但是在这之前回车也被读取进去了呦,
也就是说运行完fgets()函数后,你的str内是这样的"(你输入的字符)'\n' '\0' "{:10_254:} jzzc 发表于 2020-3-6 15:26
哈哈,这个问题其实很简单的,fgets会在读到回车时自动结束并在后面加一个'\0',但是在这之前回车也被读取 ...
还有不懂的欢迎追问哦{:10_297:} 百度来的一些资料:fgets()函数读取到它所遇到的第一个换行符的后面,或者读取比字符串的最大长度少一个的字符,或者读取到文件结尾。然后fgets()函数向末尾添加一个空字符以构成一个字符串。如果在达到字符最大数目之前读完一行,它将在字符串的空字符之前添加一个换行符以标识一行结束。
问题出在有时字符串的结尾处可能多出一个换行符,我们需要把它去掉。
查看汇编代码也会发现多了一个0xA,这个对应的ascii码就是换行符,所以要去掉 jzzc 发表于 2020-3-6 15:26
哈哈,这个问题其实很简单的,fgets会在读到回车时自动结束并在后面加一个'\0',但是在这之前回车也被读取 ...
好的我懂啦 非常感谢{:10_275:} KAaha 发表于 2020-3-6 15:39
好的我懂啦 非常感谢
{:10_298:} 4goodworld 发表于 2020-3-6 15:39
百度来的一些资料:fgets()函数读取到它所遇到的第一个换行符的后面,或者读取比字符串的最大长度少一个的 ...
好的好的我已经懂啦 蟹蟹大神们
页:
[1]