簡體   English   中英

分割錯誤,陣列打印C

[英]Segmentation Fault, Array Printing C

我正在嘗試編寫一個程序,該程序接受用戶輸入的字符串並將其打印為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' )。

這個:

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內部循環完成執行,而不是在內部循環的每次迭代之后
printf("%s\n", capitalA[j][i]);

應該

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

您需要按字符打印字符,但是您嘗試使用%s來打印字符串,這會嘗試打印字符串直到遇到\\0

由於%s試圖越界訪問陣列,您會看到分段錯誤。

如果要逐字符打印字符,請確保在每行之后插入\\n

 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");
}

只需使用一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM