-3

次のように strcat を呼び出すと、アプリケーションが失敗します。理由は何ですか?

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

5 に答える 5

3

*encryptedLinecharNULL ポインタです:バッファを指す必要があります。

*encyptedLineencryptedLine[0]の配列の最初のエントリであると同等char* encryptedLineです。

char *encryptedLine[255] = { 0 };

これは NULL ポインターです。

修正するには、次のいずれかに変更します。

char encryptedLine[255] = { 0 };

strcat(encryptedLine, encryptedString);

また:

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

encryptedLString次のように、のサイズも1増やす必要があると思います。

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

は 9 文字の書き込みを試みます: format で指定された 8 文字と、null ターミネータ用の 1 文字です。

char encryptedLString[9];
于 2012-03-02T14:37:08.397 に答える
1

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

于 2012-03-02T14:37:43.233 に答える
1

strcat()最初のパラメーターとして 0 を使用しようとしています。*encryptedLineでありencryptedLine[0]、あなたはそれに割り当てられ{0}ています

于 2012-03-02T14:37:56.497 に答える
0
/* LINE 1*/ char *encryptedLine[255] = {0};  
char encryptedLString[8];        
sprintf(encryptedLString, "%08lX", L);
strcat(*encryptedLine, encryptedLString);

LINE1を見ると、すべて0に初期化された255個のポインターの配列がcharに割り当てられます。次に、strcatを実行します。これにより、encryptedLStringから、NULLであるポインター*encryptedLineが指す場所に値を書き込もうとします。許可されていません。

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

于 2012-03-02T14:46:32.093 に答える
0

ポインタの配列がありますchar

char *encryptedLine[255]

メモリを割り当てておらず、それらのいずれにも割り当てていません。クラッシュ。

于 2012-03-02T14:37:57.570 に答える