2016-04-14 108 views
0

我wodering那为什么输出是4094,而不是500000无法采取超过4094个字符输入的字符串

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

下面的代码:

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

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

我已经做: ''' 的perl -e“打印“x'x50000" > 50k.txt ''' ,并用它作为输入馈送来的程序并印刷出50000.所以我认为你的输入数据有问题。就像@ForceBru提到的,这可能是你有某种特殊的性格。 –

+0

也许你的文件包含空值终止符,换行符 – ForceBru

+0

添加到由@ForceBru注释:你可能想看看http://stackoverflow.com/a/22060273/4142560 – MyCah

回答

1

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

1

思路:

  1. 如果所声称的OP文件真正由50万非白空格字符:“我的输入为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长字符的文件”简单有大约第四千零九十四字符空格。

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

+0

其实这个代码从标准输入和读取,当我试图将内容从文件复制到输入窗口,然后它经过4094 letters.WHY停止会这样,什么是它的替代品? – Fcudber

+0

@Fcudber“我试图将内容从文件复制到输入窗口”什么的是“输入窗口”?当然,这不是你的代码的一部分,可能有一个大小限制。 – chux

相关问题