【问题标题】:Strlen gives an incorrect output after fgetsStrlen 在 fgets 后给出不正确的输出
【发布时间】:2014-11-09 18:41:00
【问题描述】:

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

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

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

【问题讨论】:

  • 是的,我设置为 0。这不是问题。
  • 好吧strlen 也不是问题,我向你保证。您应该提供一个重现问题的可编译示例。
  • 尝试输入其他字符串,看看 i 的输出值?你确定你有 int i =0;?

标签: c fgets strlen


【解决方案1】:

函数fgets 还在字符串中包含换行符。所以函数strlen 计算这个符号。

来自 C 标准

2 fgets 函数读取的次数最多小于 1 从流指向的流中由 n 指定的字符 into s 指向的数组。 a 后不读取其他字符 换行符(保留) 或在文件结尾之后。一个空 在读入最后一个字符后立即写入字符 数组。

【讨论】:

    【解决方案2】:

    下面的代码输出正确的值:

    int main() 
        {
           char word[256];
           int i =0; 
           fgets(word, sizeof(word), stdin);
           while(word[i])
              i++;
           printf("%d\n",i);
        }
    

    【讨论】:

    • 这与 OP 有何不同,除了 int i=0; OP 声称他做到了?
    猜你喜欢
    • 2023-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    相关资源
    最近更新 更多