【发布时间】:2014-03-14 19:14:39
【问题描述】:
我的代码出现分段错误。我的代码是:
#define STARTING_POINT 5
int main(int argc, char *argv[])
{
input(argc, argv);
parser(argc, argv);
drawingRooms();
return 0;
}
void drawingRooms(room roomInfo[6])
{
int rooms;
int i;
int positionX;
int positionY;
rooms = 0;
initscr();
noecho();
for(rooms = 0; rooms < 6; rooms++)
{
switch(rooms)
{
case 0:
for(i = 0; i <= roomInfo[rooms].length; i++);
{
move(STARTING_POINT + i, STARTING_POINT);
printw("|");
}
break;
}
}
getch();
endwin();
}
void parser(int argc, char **argv)
{
FILE * rooms;
char * theString;
char * theToken;
int width;
int length;
int k;
int x;
int placeInt;
int posX;
int posY;
char a[ROOM_STRING_LENGTH];
item gold;
item monster;
item potion;
item hero;
item stairs;
room roomInfo[6];
rooms = fopen(argv[1], "r");
if(rooms == NULL)
{
printf("error opening file\n");
}
x = 0;
while(fgets(a, ROOM_STRING_LENGTH, rooms) != NULL)
{
theString = malloc((sizeof(char)*(strlen(a)+1)));
strcpy(theString, a);
for(theToken = strtok(theString, " "); theToken; theToken = strtok(NULL, " "))
{
sscanf(theToken, "%dX%d", &length, &width);
roomInfo[x].roomNumber = x;
roomInfo[x].width = width;
roomInfo[x].length = length;
if(theToken[0] == 'd')
{
switch(theToken[1])
{
case 'e':
{
placeInt = theToken[2] - '0';
roomInfo[x].eastDoor = placeInt;
break;
}
case 'w':
{
placeInt = theToken[2] - '0';
roomInfo[x].westDoor = placeInt;
break;
}
case 's':
{
placeInt = theToken[2] - '0';
roomInfo[x].southDoor = placeInt;
break;
}
case 'n':
{
placeInt = theToken[2] - '0';
roomInfo[x].northDoor = placeInt;
break;
}
default:
{
break;
}
}
}
else if(theToken[0] == 'g' || theToken[0] == 'm' || theToken[0] == 'p' || theToken[0] == 'h')
{
k = 0;
while(k <= (strlen(theToken)))
{
switch(theToken[k])
{
case 'g':
posY = theToken[1] - '0';
posX = theToken[3] - '0';
gold.Xposition = posX;
gold.Yposition = posY;
break;
case 'm':
posY = theToken[1] - '0';
posX = theToken[3] - '0';
monster.Xposition = posX;
monster.Yposition = posY;
break;
case 'p':
posY = theToken[1] - '0';
posX = theToken[3] - '0';
potion.Xposition = posX;
potion.Yposition = posY;
break;
case 'h':
posY = theToken[1] - '0';
posX = theToken[3] - '0';
hero.Xposition = posX;
hero.Yposition = posY;
break;
case 's':
posY = theToken[1] - '0';
posX = theToken[3] - '0';
stairs.Xposition = posX;
stairs.Yposition = posY;
break;
}
k++;
}
}
else if(theToken == NULL)
{
printf("end of file");
}
}
if(theToken == NULL)
{
printf("\n");
}
x++;
}
free(theString);
fclose(rooms);
}
我的结构是:
typedef struct
{
int roomNumber;
int length;
int width;
int eastDoor;
int westDoor;
int southDoor;
int northDoor;
}room;
我想要做的是访问我的结构数组中的第一个结构,然后用我获得的信息做一些事情。每当我运行以下代码时,都不会打印任何内容,并且出现段错误
【问题讨论】:
-
什么是
STARTING_POINT? -
你和this guy同班吗?
-
与问题无关,但如果这是我认为的方向(您要将部分或全部案例 1 到 5 添加到
switch),您可能会有loop-switch antipattern 这里。 -
起点已经更新,我很可能和那家伙在同一班
-
你能显示你正在推入这个函数的
room roomInfo[6]数组吗?也许是你调用这个drawingRooms的函数
标签: c segmentation-fault ncurses