我在讨论输出为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));
}
答案 0 :(得分:1)
这是因为输入文件的第4095个字节为零,strlen
计数到达第一个零。
答案 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));
}
}
OP声称文件存在“500000长字符文件”,但此代码不是从文件读取,而是从stdin
读取。可能未发布调用该程序及其重定向输入正在使用某种将输入限制为4094的机制。
“500000长字符文件”简单有关于第4094个字符的空格。
当@Kuba Ober回答时,第4094个字符(第0个字符的第一个位置)是空字符。 "%s"
会令人惊讶地读取多个空字符,因为空字符不是空格。