2013-03-25 144 views
0

是否有可能宣佈一個二維數組,像這樣:聲明2d字符數組?

char words[128][25]; 

,然後只分配給它,像這樣:

int i=0; 

while(fscanf(fp,"%s" words[i++]) != EOF){ 
printf("Copied"); 
} 

我已經看到了它的一小段代碼,也沒有理解這麼試了一下,當它試圖運行這一行時,從代碼塊中獲取崩潰。當它被聲明爲這樣的數組時,它是一種完全無效的方式嗎?它編譯好它只是不運行。

+2

請向我們展示一些可編譯的代碼。 – NPE 2013-03-25 15:58:05

回答

2

這是使用數組的合法方式;這個問題似乎是在你的同時:

while(fscanf(fp,"%s words[i++]) == EOF){ 

你只需要"%s後關閉引號和逗號。

+0

@icepack我剛試過這個,GCC和Clang都沒有發出警告,即使是這個'-pedantic -Wall -Wextra'。這對我來說似乎完全有效。 – raptortech97 2013-03-25 16:21:57

+0

對不起,我的壞 - 誤讀了這個問題 – SomeWittyUsername 2013-03-25 16:25:44

+0

是缺少逗號和==不!=只是我可憐的打字寫這個問題!所以它是使用數組的有效方式,這就是我想知道的。 – 2013-03-25 17:48:53

2

以及什麼猛禽解釋, 還循環,而你等於EOF .. 這意味着你將永遠不會得到「抄襲」,除非該文件是空的.. 你大概的意思是:

while(fscanf(fp,"%s",words[i++]) != EOF){ 
printf("Copied"); 
} 
  • 編輯:

參考Whoz評論,這是事實,這是一個危險的代碼,如果你的代碼比在初始化的話,那麼你將得到一個異常多行,除此之外,我確實會說明提取的行數(或字數)(-1)

+0

應該注意,當這種情況發生時,'i'將比*成功*掃描字符串的數量大1。 – WhozCraig 2013-03-25 16:06:38

+0

@WhozCraig:謝謝,對我的回答添加了更多解釋(或者更確切地說是警告) – Alon 2013-03-25 16:10:34

+1

我可能應該詳細闡述。設想一個單詞的文件。第一次迭代將把單詞讀入'words [0]'並將'i'增加到1並且不返回EOF。 * second *迭代將*失敗*將單詞讀入'words [1]'並將'i'增加到2,*然後*返回EOF來打破循環。底線:不管這會怎樣*總是以'i'結尾反映1 - 大於成功分析的字符串的實際數量。另一個例子,如果在* empty *文件中調用它,它將會是'1'(我希望這很明顯,爲什麼)。 – WhozCraig 2013-03-25 16:18:08