2

私のプログラムでこの動作を引き起こしている原因について混乱しています。char*要素をコピーする代わりに、ある配列の内容を別の配列にコピーしようとしていますが、奇妙な方法で文字列を連結しています。私はこのようなことをしています:

char* a[50]; 
char* b[50];

for(int n=0; n<x; n++){
    a[n] = malloc(sizeof(char) * (1 + strlen(b[n])));
    strcpy(a[n], b[n]);
}

誰かがこれを以前に経験したことがありますか?それが役に立ったら、出力を投稿できます。

ありがとう。

4

2 に答える 2

1

いくつかの問題:

whileループしn < xます。何xですか?の場合x >= 50、配列の最後から実行されます。ループ状態は、この可能性から保護する必要があります。

また、によって返されるメモリmallocは初期化されていないことに注意してください。NULLターミネータに追加のバイトを割り当てるのは良いことです。欠落しているのは、NULLターミネータの値を実際に設定するコードです。この結果、a[]文字列はNULLで終了しない可能性が高くなります(最後の文字は、以前にそのバイトに格納されていたランダムなガベージです)。それらを印刷したり、そのような文字列関数を使用したりしようとするとstrlen、文字列の終わりを超えて、次のメモリ範囲にあるものすべてに読み込まれます。

于 2012-10-19T17:34:17.953 に答える
1

strncpyを使用してみると、a [n]の最後にnull終了文字が追加されていることに注意してください。これにより、b [n]にnull終了文字があるという仮定に依存するのではなく、コピーしているものを確実に知ることができます。

于 2012-10-19T17:34:43.477 に答える