2016-04-14 151 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

相關問題