c - 段错误,数组打印C

标签 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,但出现了段错误。

最佳答案

char capitalA[7][5]

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

char capitalA[7][6] 

相反。并将您的循环更改为单个循环

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

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

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

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

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

关于c - 段错误,数组打印C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33317745/

相关文章:

c - 为什么我没有收到任何错误?在这两行之间--- typedef int floa[1]; floa a[5]={5,6,1,2,6,8};

c - 嵌套预处理器等同于 #define

linux - 运行 cmp 'A' 的段错误,%al‽

C 帮助解释 calloc segfault

c - 分段故障

c - 这个数组是如何用 C 中的索引初始化的?

c - 将链表的头与其中的链接交换?

c - 如何用 C 语言编写 LLVM Pass

c - 使用 uthash HASH_ADD_KEYPTR(段错误)

c++ - 在迭代期间调用集合上的 erase()