2012-03-02 18 views
-3

私のアプリケーションは、以下の理由から何かの理由をstrcatに呼び出すと失敗しますか?Cのアプリケーションがstrcatに落ちる

char *encryptedLine[255] = {0}; 
char encryptedLString[8];   
sprintf(encryptedLString, "%08lX", L); 
strcat(*encryptedLine, encryptedLString); 
+2

char * encryptedLine [255]の構成は何ですか?そしてあなたはsprintfで使っているLは何ですか? – Alecs

+0

'* encryptedLine [255]' - あなたは何をしようとしていますか? –

+1

下のすべての投票は何ですか?私は明らかに答えられる質問のための十分な情報を与えましたか? – Dunc

答えて

3

*encryptedLine NULLポインタである:それはcharバッファをポイントする必要があります。

*encyptedLine

char*encryptedLineの配列の最初のエントリである、encryptedLine[0]と等価である:

char *encryptedLine[255] = { 0 }; 

NULLポインタです。私はあなたにも1でencryptedLStringのサイズを大きくする必要があると思う

encryptedLine[0] = malloc(255); 
strcat(*encryptedLine, encryptedString); 

char encryptedLine[255] = { 0 }; 

strcat(encryptedLine, encryptedString); 

か:のいずれかに変更、修正するには

sprintf(encryptedLString, "%08lX", L); 

ます9文字を書き込もうとします:フォーマットで指定された8つとヌルターミネータの場合は1:

char encryptedLString[9]; 
+0

= {0}を削除する必要がありますか?それはうまくいきません。 – Dunc

+2

あなたはおそらく削除したい* – Alecs

+2

@Dunc:まず何をしようとしているか教えてください... –

1

encryptedLineはNULLに初期化された255個のポインタの配列です。 * encryptedLineはNULLポインタです。 strcatへの最初の引数としてNULLポインタを渡しているので、失敗します。

1

最初のパラメータとしてstrcat()に0を設定しようとしています。あなたが任意のメモリを割り当てられ、それらのいずれかにそれを割り当てていないcharポインタ

char *encryptedLine[255] 

の配列を持っている*encryptedLineencryptedLine[0]であり、あなたはそれに

0

{0}を割り当て。クラッシュ。 LINE1で

0
/* LINE 1*/ char *encryptedLine[255] = {0}; 
char encryptedLString[8];   
sprintf(encryptedLString, "%08lX", L); 
strcat(*encryptedLine, encryptedLString); 

ルックは、それはあなたが場所にencryptedLStringから値を書き込むしようとしますstrcatのは、ポインタで指さない、その後、すべて0に初期化されている文字への255個のポインタの配列を割り当て* encryptedLineはNULLで、これは許可されません。

encryptedLineのポインタにメモリを割り当てるだけで、このプログラムはクラッシュしません。

関連する問題