分段故障,阵列打印C.

时间:2015-10-24 11:39:47

标签: c segmentation-fault

我正在尝试编写一个程序,该程序接受用户输入字符串并将其打印为7 x 5星号网格。我目前正在试图找出如何打印字母,因为我需要逐行打印,以便不同的字母并排打印。

无论如何,到目前为止我的尝试是:

#include <stdio.h>
#include <string.h>


char capitalA[7][5] = { 
"  *  ",
" * * ",
"*   *",
"*****",
"*   *",
"*   *",
"*   *"
};
int i;
int j;

int main() 
{//main

    for (i = 0; i < 5 ; i++) 
    {
        for (j = 0; j < 7 ; j++) 
        {
            printf("%s\n", capitalA[j][i]);
        }
    }
    return (0);
}//*main

我想要的输出是星号A,但是我收到了分段错误。

5 个答案:

答案 0 :(得分:3)

char capitalA[7][5]

不够大。您在初始化中使用的字符串文字自动包含\0字符,因此您需要使用

char capitalA[7][6] 

代替。并将您的循环更改为单个

for (j = 0; j < 7 ; j++)
    printf("%s\n", capitalA[j]);

因为您现在使用char说明符显示%s

如果您对自动添加'\0'并且需要节省空间不满意,可以使用当前拥有的代码,或者使用大括号初始化来初始化数组,如

char capitalA[7][5] = {{' ', ' ', '*', ' ', ' '}, ...};

并坚持按char显示字符char(确保使用'%c'说明符而不是'%s')。

答案 1 :(得分:2)

此:

for (i = 0; i < 5 ; i++) {
    for (j = 0; j < 7 ; j++) {
        printf("%s\n", capitalA[j][i]);
}
}

应该是

for (i = 0; i < 7; i++) {
    for (j = 0; j < 5; j++) {
        printf("%c", capitalA[i][j]);
    }
    printf("\n");
}

,因为

  1. char的正确格式说明符为%c,而非%s
  2. 你混淆了循环。外部应循环7次,而内部应循环5次。
  3. 你应该在内循环完成后打印\n ,而不是在内循环的每次迭代中打印。

答案 2 :(得分:1)

printf("%s\n", capitalA[j][i]);

应该是

printf("%c", capitalA[j][i]);

您需要的是逐个字符打印,但是您尝试使用%s打印字符串,该字符串会尝试打印字符串,直到遇到\0

由于%s试图访问数组超出范围,因此您会看到分段错误。

如果您想使用char打印char,请确保在每行后插入\n

答案 3 :(得分:0)

 for (i = 0; i < 5 ; i++) 
 {
    for (j = 0; j < 7 ; j++) 
    {
        printf("%s\n", capitalA[j][i]);
    }
 }

您正在打印char类型数组。不是一个字符。将其更改为

for (i = 0; i < 5 ; i++) 
{
    for (j = 0; j < 7 ; j++) 
    {
        printf("%c", capitalA[j][i]);
    }
    printf("\n");
}

答案 4 :(得分:0)

只需使用一个for循环,并在数组声明中将5更改为6,如下所示:

char capitalA[7][6]
//  and
for(j=0 ; j<7 ; j++)
    printf("%s\n",capitalA[j]);

修改后你的程序会像这样,试试^^:

#include <stdio.h>
#include <string.h>

//edit the column nomber to support the '\0' it will be 6 not 5.
char capitalA[7][6] = { 
"  *  ",
" * * ",
"*   *",
"*****",
"*   *",
"*   *",
"*   *"
};
int i;
int j;

int main() 
{//main


        for (j = 0; j < 7 ; j++) 
        {
            printf("%s\n", capitalA[j]);
        }

    return (0);
}//*main