2016-11-27 108 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