使用二维数组,分段错误(核心转储)

时间:2014-10-17 19:05:58

标签: c arrays multidimensional-array segmentation-fault

我查看不同的网站..但任何让我理解的问题是什么..我刚开始用C编程。任务是使用2维数组绘制棋盘并构建一个交替黑白的功能(使用适当的符号)。

#include <stdio.h>

char makeChessBoard(int length,int width, char board[width][length]) {
  int i;
  int j;
  for (i = 0; i < width; i++) {
   // printf("\n");
    for (j = 0; j < length; j++) {
      if((i+j)%2 == 0)
        board[i][j] = "[#]";
      else
        board[i][j] = "[ ]"; 
    }//for
  }//for
  //return 0;

}//makeChessBoard


int main()
{
int x = 9;
int y = 9;
char initialBoard[x][y];
char chessBoard[x][y];
makeChessBoard(initialBoard[x][y],x,y);
for (int i = 0; i < x; i++) {
    printf("\n");
    for (int j = 0; j < y; j++) {
      printf("%s", chessBoard[i][j]);
    }//for
  }//for


}//main

4 个答案:

答案 0 :(得分:1)

上发出警告
makeChessBoard(initialBoard[x][y],x,y);

应该是

makeChessBoard(x, y, initialBoard);

board[i][j] = "[#]"; /* you can't assign a string, use a char e.g: '#' */

同样适用于

board[i][j] = "[ ]"; 

最后,您正在打印字符,请使用:

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

而不是

printf("%s", chessBoard[i][j]);

答案 1 :(得分:0)

您可以像这样致电makeChessboard

 makeChessBoard(initialBoard[x][y],x,y);

但它的定义如下:

 char makeChessBoard(int length,int width, char board[width][length]) 

请注意,您将数组传递到错误的参数位置。

此外,您传递的是特定的数组元素(在x,y),而不是整个数组。

答案 2 :(得分:0)

尝试运行启用了警告的代码(gcc -Wall ...)并检查编译器会告诉您什么。 segfault的直接原因可能是char而不是char *。

答案 3 :(得分:0)

1)您调用函数makeChessBoard(initialBoard[x][y],x,y);和函数定义应该是不同的:(int length,int width, char board[width][length])

2)在函数makeChessBoard中将board[i][j] = "[#]";更改为board[i][j] = '#';。同样,将board[i][j] = "[ ]";更改为board[i][j] = ' ';

3)打印时,您应该在填充此2D数组中的值时打印initialBoard的值,因此将printf("%s", chessBoard[i][j]);更改为printf("[%c]", initialBoard[i][j]);

4)数组索引从零开始,因此如果要打印棋盘xy应设置为8

#include <stdio.h>

char makeChessBoard(int length,int width, char board[width][length]) 
{
    int i;
    int j;
    for (i = 0; i < width; i++) 
    {
        for (j = 0; j < length; j++) 
        {
            if( ((i+j) % 2) == 0)
                board[i][j] = '#';
            else
                board[i][j] = ' '; 
        }//for
    }//for
}//makeChessBoard

int main()
{
    int x = 8;
    int y = 8;
    int i,j;
    char initialBoard[x][y];
    //char chessBoard[x][y]; /* You are not using this 2-D array */
    makeChessBoard(x,y,initialBoard);
    for (i = 0; i < x; i++) 
    {
        for (j = 0; j < y; j++) 
        {
            printf("[%c]", initialBoard[i][j]);
        }//for
        printf("\n");
    }//for
}//main

<强>输出

[#][ ][#][ ][#][ ][#][ ]
[ ][#][ ][#][ ][#][ ][#]
[#][ ][#][ ][#][ ][#][ ]
[ ][#][ ][#][ ][#][ ][#]
[#][ ][#][ ][#][ ][#][ ]
[ ][#][ ][#][ ][#][ ][#]
[#][ ][#][ ][#][ ][#][ ]
[ ][#][ ][#][ ][#][ ][#]