2017-10-18 4 views
-1

Dies wurde beantwortet, danke für die Hilfe.Mehrere aufeinanderfolgende strcpy(), Display enthält Bits von jedem nächsten strcpy()

+2

Bitte geben Sie eine [MCVE]. Nicht viele Leute werden Ihren gesamten Code durchsehen müssen, um Ihren Fehler zu finden. – Kevin

+2

tl; dr Sind Sie sicher, dass Sie genügend Platz für alle Strings reserviert haben? –

+1

Nicht im Zusammenhang mit Ihrem Problem, aber mit Structs und Arrays können Sie wahrscheinlich die Größe Ihres Programms um mindestens einen Faktor 4 reduzieren. –

Antwort

2

diese 2 Linien zeigen, was falsch läuft:

folgende Zeile deklariert ein Array von char cP1_Move2_Name mit „PFUND“ initialisiert. Die Größe dieses Arrays ist genau 6 Bytes, das sind die 5 Zeichen von "POUND" plus eins für den NUL-Terminator (Strings werden durch ein NUL-Zeichen abgeschlossen, lesen Sie das Kapitel in Ihrem C-Lehrbuch für weitere Details):

char cP1_Move2_Name[] = "POUND"; 

Jetzt in der folgenden Zeile kopieren Sie "EARTHQUAKE" in das Array cP1_Move2_Name. Für „ERDBEBEN“ müssen Sie 11 Bytes, aber wie bereits erwähnt, die Größe des cP1_Move2_Name Array nur 6.

strcpy(cP1_Move2_Name,"EARTHQUAKE"); 

ist Also, was ist passiert, dass mehr Bytes kopiert werden, als Platz vorhanden ist, so dass einige andere Speicher werden überschrieben werden und Sie können alle möglichen Probleme erfahren.

Um das Programm zu korrigieren, können Sie Ihr Array mit einer vorgegebenen maximalen Größe deklarieren, um sicherzustellen, dass immer genügend Speicherplatz vorhanden ist.

#define MAXSTRINGLENGTH 100 
... 
char cP1_Pokemon_Name[MAXSTRINGLENGTH] = "POKEMON"; 
char cP1_Move1_Name[MAXSTRINGLENGTH] = "TACKLE"; 
char cP1_Move2_Name[MAXSTRINGLENGTH] = "POUND"; 
... 
etc. 
+0

Oh, das macht mehr Sinn. Ich bin daran vorbeigelaufen, um die Länge der Zeichenfolge zu definieren, aber ich tat es nicht Verstehen und erkennen und es ist Implikationen Programmieren ist sicher eine Menge Arbeit hahaha Jetzt muss ich nur herausfinden, warum 5 als 69 ausgedruckt wird. –