私のアプリケーションは、以下の理由から何かの理由をstrcatに呼び出すと失敗しますか?Cのアプリケーションがstrcatに落ちる
char *encryptedLine[255] = {0};
char encryptedLString[8];
sprintf(encryptedLString, "%08lX", L);
strcat(*encryptedLine, encryptedLString);
私のアプリケーションは、以下の理由から何かの理由をstrcatに呼び出すと失敗しますか?Cのアプリケーションがstrcatに落ちる
char *encryptedLine[255] = {0};
char encryptedLString[8];
sprintf(encryptedLString, "%08lX", L);
strcat(*encryptedLine, encryptedLString);
*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];
encryptedLineはNULLに初期化された255個のポインタの配列です。 * encryptedLineはNULLポインタです。 strcatへの最初の引数としてNULLポインタを渡しているので、失敗します。
最初のパラメータとしてstrcat()
に0を設定しようとしています。あなたが任意のメモリを割り当てられ、それらのいずれかにそれを割り当てていないchar
ポインタ
char *encryptedLine[255]
の配列を持っている*encryptedLine
はencryptedLine[0]
であり、あなたはそれに
を{0}
を割り当て。クラッシュ。 LINE1で
/* LINE 1*/ char *encryptedLine[255] = {0};
char encryptedLString[8];
sprintf(encryptedLString, "%08lX", L);
strcat(*encryptedLine, encryptedLString);
ルックは、それはあなたが場所にencryptedLStringから値を書き込むしようとしますstrcatのは、ポインタで指さない、その後、すべて0に初期化されている文字への255個のポインタの配列を割り当て* encryptedLineはNULLで、これは許可されません。
encryptedLineのポインタにメモリを割り当てるだけで、このプログラムはクラッシュしません。
char * encryptedLine [255]の構成は何ですか?そしてあなたはsprintfで使っているLは何ですか? – Alecs
'* encryptedLine [255]' - あなたは何をしようとしていますか? –
下のすべての投票は何ですか?私は明らかに答えられる質問のための十分な情報を与えましたか? – Dunc