打印2D字符数组

时间:2014-02-03 21:06:55

标签: c arrays pointers

我不断得到一个嵌套函数是禁止的错误。当我尝试使用指针时,我收到并报告错误“初始化使得指针来自整数而没有强制转换”。并且不确定那是怎么回事。 (使用-ansi和-pedantic)

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


void createArt(int m) {
int i = 0, j =0, k = 1, l = 1;

char ascii_art[5][5] {
    {'/','/','/','/','/'},
    {'/','/','/','/','/'},
    {'/','/','/','/','/'},
    {'/','/','/','/','/'},
    {'/','/','/','/','/'}
};  

for(i; i < (5 * m); i++) {
    for(j; j < (5 * m); j++) {
        printf("%s", ascii_art[i][j]); /* can't print out chars */
    }
}
}

int main() {
int multiplier = 0, m = 1;

printf("Enter a number: ");
scanf("%d", &multiplier);

createArt(multiplier);

return 0;
}

2 个答案:

答案 0 :(得分:3)

=之后char ascii_art[5][5]应该有char%c打印%s,而不是initialization makes pointer from integer without a cast

我无法重现i错误,但您有几个未使用的变量,for(i; i < (5 * m); i++) {中的第一个j=0无效。你也可以把它留下来。 (与其他循环相同)。

至少在第二个循环中(第一个也不会受到伤害)你可能想写i=0,否则只会为multiplier执行内循环。

如果1大于i,您的代码也将失败,因为j5将大于{{1}},您将尝试访问数组越界。

答案 1 :(得分:0)

到目前为止我发现的问题

1)您在声明ascii_art

后缺少=

2)你应该用

中的%c替换%s
 printf("%s", ascii_art[i][j]); 

%s用于打印以\0结尾的字符串,对于单个字符,您需要使用%c

此外,我担心你会用这个乘数做坏事,因为你的循环停止条件是i< 5*m而m是从scanf用户那里获得的。我看到只有两个有效的乘数选项,在这种情况下为0,1,任何其他值都将取出你的数组。