[英]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");
}
因為
char
的正確格式說明符是%c
,而不是%s
。 \\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.