每当我运行这个结构时,我可以到达你输入构造修饰符的行,程序崩溃时会弹出一个窗口,该窗口读取" 0x00000000775AFDE9处的指令引用了0x000000007758D250处的内存。无法写入内存。按“确定”终止。"这是有问题的结构:
struct player_info create_player(void);
struct player_info{
char name[30];
int Level, Str, Dex, Con, Int, Wis, Cha;
};
struct player_info create_player(void){
struct player_info aPlayer;
{
char c;
int i;
printf("Enter Player Name: ");
scanf("%s",aPlayer.name);
i = strlen(aPlayer.name);
do{
scanf("%c", &c);
aPlayer.name[i++] = c;
}
while (c != '\n');
aPlayer.name[i - 1] = 0;
}
printf("Level: ");
scanf("%d",aPlayer.Level);
printf("Strength Modifier: ");
scanf("%d",aPlayer.Str);
printf("Dexterity Modifier: ");
scanf("%d", aPlayer.Dex);
printf("Constitution Modifier: ");
scanf("%d", aPlayer.Con);
printf("Intelligence Modifier: ");
scanf("%d", aPlayer.Int);
printf("Wisdom Modifier: ");
scanf("%d", aPlayer.Wis);
printf("Charisma Modifier: ");
scanf("%d", aPlayer.Cha);
return aPlayer;
};
写位:
int save_data(){
FILE* PlayerFile = fopen("players.txt","w");
int i = 0;
for (i = 0; i < 1; i++){
struct player_info aPlayer = create_player();
fprintf(PlayerFile, "%s %d %d %d %d %d %d %d\n", aPlayer.name, aPlayer.Level, aPlayer.Str, aPlayer.Dex, aPlayer.Con, aPlayer.Int, aPlayer.Wis, aPlayer.Cha);
}
fclose(PlayerFile);
return 0;
}
现在,要清楚,我可以输入灵巧修饰符。应该要求宪法的下一行不会打印,而且当我收到弹出错误时就是这样。
我试过评论从宪法模式到魅力的一切,只是为了看,我也遇到了同样的问题。仅删除构成部分也不起作用。我不确定这里发生了什么;我看过其他帖子说过指针有问题,但是我没有看到类似的东西,除非它只是你错过的那些东西之一,需要别人指点出。无论如何,任何帮助都表示赞赏。
答案 0 :(得分:4)
scanf
期望您要写入的变量的地址。所以这个
scanf("%d",aPlayer.Level);
应该是这个
scanf("%d", &aPlayer.Level);
对于您的所有统计数据。现在设置它的方法包括将未指定的整数值传递给scanf
(变量aPlayer.Level
并且公司未初始化),然后将其重新解释为函数尝试写入的地址。此类代码的行为未定义。