Всякий раз, когда я запускаю эту структуру, я могу перейти к строке, в которой вы вводите модификатор конституции, и программа вылетает со всплывающим окном, которое читает «Инструкция на 0x00000000775AFDE9 ссылочной памяти на 0x000000007758D250. память не может быть записана. Нажмите OK для завершения. " Вот структура в вопросе:Референтная память не была написана
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;
}
Теперь, чтобы быть ясно, я могу ввести до модификатора ловкости. Следующая строка, которая должна запрашивать конституцию, не печатается, и именно тогда я получаю всплывающее сообщение.
Я пробовал комментировать все, начиная от конституции, до харизмы, чтобы увидеть, и у меня такая же проблема. Удаление только части конституции тоже не работает. Я не совсем уверен, что здесь происходит; Я видел другие сообщения, говорящие о неправильном указателе, но я не вижу ничего подобного, если только это не одна из тех вещей, которые вы просто пропустите, и кому-то нужно указать это. В любом случае, любая помощь приветствуется.
[Поднимите свои предупреждения на уровни педантичности] (http://pastebin.com/zUvX0UQi). – WhozCraig
при вызове какого-либо семейства функций 'scanf()' всегда проверяйте возвращаемое значение (а не значение параметра), чтобы убедиться, что операция прошла успешно. – user3629249
Функция: 'strlen()' возвращает 'size_t' не' int' – user3629249