Immer wenn ich diese Struktur ausführe, kann ich zu der Zeile gehen, in der Sie den Constitution Modifier eingeben würden und das Programm stürzt mit einem Popup Fenster ab, das lautet: "Die Anweisung bei 0x00000000775AFDE9 referenziert Speicher bei 0x000000007758D250 Speicher konnte nicht geschrieben werden. Zum Beenden OK drücken. " Hier ist die Struktur in Frage:Referenzierter Speicher konnte nicht geschrieben werden
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;
};
Und der Schreib-Bit:
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;
}
nun klar sein, kann ich Eingang bis zur Geschicklichkeit Modifikator. Die nächste Zeile, die nach der Konstitution fragen sollte, wird nicht gedruckt, und das ist, wenn ich den Popup-Fehler erhalte.
Ich habe versucht, alles von der Verfassung Mod bis zum Charisma zu kommentieren, nur um zu sehen, und ich bekomme das gleiche Problem. Das Entfernen nur des Verfassungsteils funktioniert auch nicht. Ich bin mir nicht wirklich sicher, was hier vorgeht; Ich habe andere Beiträge gesehen, die etwas über einen falschen Zeiger sagten, aber ich sehe nichts dergleichen, außer es ist nur eines dieser Dinge, die du einfach vermisst und jemanden anderen brauchst, um es darauf hinzuweisen. Wie auch immer, jede Hilfe wird geschätzt.
[Stellen Sie Ihre Warnungen auf pedantische Ebenen] (http://pastebin.com/zUvX0UQi). – WhozCraig
Wenn Sie eine der 'scanf()' -Familien von Funktionen aufrufen, überprüfen Sie immer den zurückgegebenen Wert (nicht den Parameterwert), um sicherzustellen, dass der Vorgang erfolgreich war. – user3629249
die Funktion: 'strlen()' gibt ein 'size_t' nicht ein' int' zurück – user3629249