尝试从结构 [duplicate] printf() char[] 时出现分段错误

Segmentation fault when trying to printf() a char[] from a struct [duplicate]

提问人:Stefan L McNamara 提问时间:11/3/2023 更新时间:11/3/2023 访问量:31

问:

我的 C 之旅大约一周了,所以如果这是一个非常愚蠢的问题,请耐心等待。我已经用 C 语言完成了一门基础课程,但已经找到了一些指导,所以我正在尝试写一些有助于我理解的东西。我定义了以下结构:

typedef struct {

    char room_ID;
    char room_exits[4];
    char room_description[255];

} Room;

然后,我将其初始化为player_room变量

int main(){

    Room *player_Room = (Room*)malloc(sizeof(Room));
    player_Room->room_ID = '0';
    strcpy(player_Room->room_description, "There is an ogre in the room");
    strcpy(player_Room->room_exits, "N...");

    printf("%s ", player_Room->room_ID);
    printf(" %s", player_Room->room_description);

    return 0;
}

在上面的第一行 printf() 上调试代码时发生分段错误。我知道这是一种访问冲突(我曾经是Delphi开发人员,所以我习惯了这些),试图访问我的程序无法访问的内存,或者我相信。一切都编译正常,只是那一行有错误

再一次,如果我在做一些愚蠢的事情(我可能是),我深表歉意,但我是一个非常初学者,只是在玩代码试图理解。提前致谢!

这是我尝试过的所有实际编译的第一个版本,所以我对从这里开始何去何从有点一无所知

c 结构 分段错误

评论

2赞 chux - Reinstate Monica 11/3/2023
回顾。尝试将大小为 5 的字符串放入大小为 4 的数组中。strcpy(player_Room->room_exits, "N...");
2赞 Brian61354270 11/3/2023
为什么我应该始终启用编译器警告?GCC 在此处针对该问题发出警告。
0赞 Weather Vane 11/3/2023
printf("%s ", player_Room->room_ID);但是你有.你应该使用char room_ID;"%c "
2赞 Stefan L McNamara 11/3/2023
谢谢大家的回复,我当然忘记了以 null 结尾的字符串(数组现在是 5),并且将我的 printf() 更改为使用 %c 而不是 %s(当然应该是这样,因为它是一个字符)已经解决了问题!非常感谢大家的回复(我还将启用编译器警告,谢谢)。非常感谢!
1赞 Stefan L McNamara 11/3/2023
谢谢@TedLyngmo - 刚才添加免费!

答: 暂无答案