C 不存储数据的结构指针的全局数组
我有一个C程序,它试图表示房子的布局。它在文件室中读取以下格式的文本文件: Room Door Door * Room Door Door 以下是输出:C 不存储数据的结构指针的全局数组,c,struct,C,Struct,我有一个C程序,它试图表示房子的布局。它在文件室中读取以下格式的文本文件: Room Door Door * Room Door Door 以下是输出: Reading room Hall Hall.doors[0] = Study Hall.doors[1] = Cellar Hall.doors[2] = Kitchen Reading room Study Study.doors[0] = Hall Stu
Reading room Hall
Hall.doors[0] = Study
Hall.doors[1] = Cellar
Hall.doors[2] = Kitchen
Reading room Study
Study.doors[0] = Hall
Study.doors[1] = Garden
Reading room Cellar
Cellar.doors[0] = Hall
Reading room Kitchen
Kitchen.doors[0] = Hall
Kitchen.doors[1] = Garden
Reading room Garden
Garden.doors[0] = Study
Garden.doors[1] = Kitchen
----- READ FILE SUCCESSFULLY | Room Count: 5 -----
ROOM 0: ├ïuΣ uαΦ┤■ Y├jhxÖä
ROOM 1: É√o
ROOM 2: É√o
ROOM 3: É√o
ROOM 4: É√o
一个问题
struct room *newRoom(char *name) {
struct room r;
r.name = name;
r.dp = 0;
rooms[rp++] = &r;
return &r;
}
struct room r
是局部变量,一旦控件退出newRoom
函数,它将消失
相反,你能做的是
struct room *r = malloc(sizeof(struct room));
r->name = name;
r->dp = 0;
rooms[rp++] = r;
在
readLine
中,分配足够的内存来读取完整的行,否则最终会访问越界并调用未定义的行为
char *readLine(FILE *fin) {
char *str = (char *) malloc(sizeof(char) * 256);
^^^Max line length
...
}
如果您不想盲目分配内存,您需要的是realloc。存在多个问题。一种是返回并存储指向局部变量的指针。另一种方法是为只包含两个字符但没有边界检查的字符串分配空间,并超出分配内存的边界。非常感谢,在newRoom函数中更改代码修复了它!很抱歉,我对C和指针还是很陌生,但这消除了很多困惑。再次感谢!
char *readLine(FILE *fin) {
char *str = (char *) malloc(sizeof(char) * 256);
^^^Max line length
...
}