C 不存储数据的结构指针的全局数组

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

我有一个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
        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
     ...
  }