2017-10-18 10 views
-1

これは、すべての助けに感謝に答えてきました。連続した複数のstrcpy()、ディスプレイは、すべての次のstrcpy(のビットが含まれています)

+2

[MCVE]を入力してください。あなたの間違いを見つけるためにあなたのコードをすべて見てみたい人はほとんどいません。 – Kevin

+2

tl; drすべての文字列に十分なスペースが割り当てられていますか? –

+1

あなたの問題に関連しますが、構造体や配列を使用して、あなたはおそらく、少なくともトラブルのため申し訳ありません4. –

答えて

2

これらの2行は、間違って何が起こっているかを示しています。ラインに続き

は「POUND」で初期化された文字cP1_Move2_Nameの配列を宣言します。この配列のサイズはちょうど6バイトです。つまり、 "POUND"の5文字とNULターミネータの1文字です(文字列はNUL文字で終了します)。

char cP1_Move2_Name[] = "POUND"; 

次の行では、配列「cP1_Move2_Name」に「地震」をコピーします。 「地震」のためには11バイトが必要ですが、とは前に述べたように、だから何が起こることはより多くのバイトがスペースがあるよりも、コピーされるということですcP1_Move2_Name配列のサイズが唯一の6

strcpy(cP1_Move2_Name,"EARTHQUAKE"); 

ですので、いくつかの他のメモリだろう上書きされ、あらゆる種類の問題が発生する可能性があります。あなたは、常に十分なスペースがあることを確実にするために、所定の最大サイズを使用して配列を宣言することができ、プログラムを修正するために

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

ああ、機械のプロジェクトの仕事を作ることができます知っている。私はその定義文字列の長さによって、過去走ってきましたが、私はしませんでしたプログラミングは確かにたくさんの仕事ですが、今は5がなぜ69として印刷されているのかを理解する必要があります。 –

関連する問題