【发布时间】:2021-07-19 00:52:48
【问题描述】:
我正在尝试创建一个迷宫游戏,我们在其中创建迷宫输入,例如 $ 用于敌人的奖励 X 等。我使用 * 作为边界。尽管该程序在 DEV C++ 中运行良好,但它在 C 中引发了分段错误。我只是看不出我做错了什么以及为什么它在 Windows 中工作但在 Ubuntu 中不工作。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int row, column;
int player_row, player_column, final_row, final_column;
int total_prize=0;
int prize;
int dolar[50][50];
char maze[50][50];
scanf("%d %d", &row, &column);
int i;
int j;
for(i=0;i<=row;i++){
for(j=0;j<=column;j++){
maze[i][j]='+';
}
}
for(i=0;i<column;i++){
maze[0][i]='*';
maze[row-1][i]='*';
}
for(j=0;j<row;j++){
maze[j][0]='*';
maze[j][column-1]='*';
}
int details = 1;
while(details==1){
char detail;
int row, column;
//scanf("%s %d %d",&detail, &row, &column);
scanf("%s", &detail);
if(detail=='s'){
scanf("%d %d", &row, &column);
player_row = row;
player_column = column;
maze[row][column]='O';
}
else if(detail=='f'){
scanf("%d %d", &row, &column);
final_row =row;
final_column = column;
maze[row][column]=' ';
}
else if(detail=='b'){
scanf("%d %d", &row, &column);
maze[row][column]='*';
}
else if(detail=='$'){
scanf("%d %d %d", &row, &column, &prize);
//scanf("%d", &prize);
dolar[row][column]=prize;
maze[row][column]='$';
}
else if(detail=='X'){
scanf("%d %d", &row, &column);
maze[row][column]='X';
}
else if(detail="end"){
maze[0][0]='*';
maze[0][1]='*';
maze[0][2]='*';
maze[0][3]='*';
break;
}
}
for(i=0;i<=row;i++){
for(j=0;j<=column;j++){
if(maze[i][j]=='+'){
printf(" ");
}
else{
printf("%c", maze[i][j]);
}
}
printf("\n");
}
【问题讨论】:
-
@KfirVentura 没用。
-
这不行:
if(detail="end")detail只是一个字符,不能和三个字符的字符串相同。这也是一个赋值失败,因为detail不能保存指针。 -
请提供您的意见。
row和column是什么? -
这也是错误的:
scanf("%s", &detail);你必须提供一个字符串的地址。detail可以容纳 0 个字符,因为它已经用于终止 0 个字节。您可能想读取使用%c完成的单个字符。 -
顺便说一句:您的编译器应该已经报告了其中一些错误。如果没有,请调高警告级别。如果它们被报告,请不要忽略编译器警告
标签: c ubuntu segmentation-fault coredump