在fgets之后,Strlen提供了错误的输出

时间:2014-11-09 18:41:00

标签: c fgets strlen

我使用fgets读取了一个字符串。它打印正确,但如果我尝试使用strlen或while输出长度直到NULL它返回一个错误的值。 fgets不会以NULL结束字符串吗?

char word[256];
fgets(word, sizeof(word), stdin);
while(word[i])
    i++;
printf("%d",i);

对于字符串aba,它输出40。

2 个答案:

答案 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);
    }