2016-11-27 109 views
0

我正在處理我的C代碼,並遇到了打印我的二維數組的問題。而不是打印一個字符串,它從問題點打印整個數組。C:打印二維數組問題

作爲一個例子,輸入的是,「狗」,「貓」,「帽子」。然後它會打印出來:

DogCatHat 
CatHat 
Hat 

這是我的代碼是suppsoed要做的:它從文件讀取。它創建一個char數組數組。每個字符數組中有30個字符,這時從文件中讀取一個字符。然後它打印出每行一個字符數組。

這是代碼的樣子:

char fname[] = "folder/text.txt"; 
char arry[30][30]; 
FILE *file; 

file = fopen(fname, "r"); 
for(int x=0; x<30; x++){ 
    for(int i=0; i<30; i++){ 
     arry[x][i] = fgetc(file); 
    } 
} 

fclose(file); 
for(int i=0; i<30; i++){ 
    printf("%s\n", arry[i]); 
} 

很可能我剛纔提出一個明顯的錯誤,但我沒能找到它。所以請幫助。

+0

看到你的問題的標題很奇怪!你不能說'printf()'打印一個二維數組。它不能。 –

+2

請記住C中的字符串實際上被稱爲* null terminated *字節字符串。該終結符是將字符數組轉換爲字符串的方式。 –

+0

@BLUEPIXY這不是問題,只是我沒有寫我自己的代碼。但是,tes tjat會是個問題... – Adrian

回答

1

我認爲文件中的字符串不是空終止。所以你需要將空字符放在數組的最後一個字符處。

char arry[30][30] 

for(int x=0; x<30; x++){ 
    for(int i=0; i<29; i++){ //You can write 29 characters + '\0' 
     arry[x][i] = fgetc(file); 
    } 
    arry[x][29] = '\0'; 
} 
for(int i=0; i<30; i++){ 
    printf("%s\n", arry[i]); 
} 
+0

是的!謝謝!正如Ray Hamel所建議的那樣,我做了arry [30] [31]並添加了'\ 0'。 – Adrian