无法在字符串

时间:2016-04-14 18:54:40

标签: c

我在讨论输出为4094而不是500000的原因。

我的输入是500000长字符文件,没有任何空格。 例如:(vjdnvkk ...... abcf),没有。 char = 500000。

以下是代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char s[500000];
    scanf("%s",s);
    printf("%d",strlen(s));
}

2 个答案:

答案 0 :(得分:1)

这是因为输入文件的第4095个字节为零,strlen计数到达第一个零。

答案 1 :(得分:1)

思路:

  1. 如果文件确实由OP声明的500,000个非空格字符组成:“我的输入是500000长字符文件”,则代码需要s大1以防止未定义的行为。还可以使用匹配的说明符来打印s的长度。 @Schwern

    int main(void) {
        char s[500000 + 1];
        if (scanf("%500000s",s) == 1) {
          printf("%zd",strlen(s));
        }
    }
    
  2. OP声称文件存在“500000长字符文件”,但此代码不是从文件读取,而是从stdin读取。可能未发布调用该程序及其重定向输入正在使用某种将输入限制为4094的机制。

  3. “500000长字符文件”简单有关于第4094个字符的空格。

  4. @Kuba Ober回答时,第4094个字符(第0个字符的第一个位置)是空字符。 "%s"会令人惊讶地读取多个空字符,因为空字符不是空格。