我使用fgets读取了一个字符串。它打印正确,但如果我尝试使用strlen或while输出长度直到NULL它返回一个错误的值。 fgets不会以NULL结束字符串吗?
char word[256];
fgets(word, sizeof(word), stdin);
while(word[i])
i++;
printf("%d",i);
对于字符串aba,它输出40。
答案 0 :(得分:1)
函数fgets
还包括字符串中的换行符。因此,函数strlen
会计算此符号。
来自C标准
2 fgets函数最多读取的数量少于1 由流指向的流中的n指定的字符 s指向的数组。 a之后不会读取其他字符 换行符(保留)或文件结束后。空 在读入最后一个字符后立即写入字符 数组。
答案 1 :(得分:0)
以下代码输出正确的值:
int main()
{
char word[256];
int i =0;
fgets(word, sizeof(word), stdin);
while(word[i])
i++;
printf("%d\n",i);
}