1

2つの質問があります..

  1. に対して次のコマンドを実行するときに、終了文字を追加する必要がありますchar *stringか?

    strcpy();

    strncpy();

  2. に対して機能するために、上記の操作を行う前にメモリを割り当てる必要がありchar *stringますか?

例えば..

char *str;
str = malloc(strlen(texttocopy));
strcpy(texttocopy, str); // see the below edit

説明してください。

編集: 上記のコードでは、引数を反転させました。ここで質問しているときにタイプミスしただけです。正しい方法は

strcpy(str, texttocopy); // :)
4

2 に答える 2

3

関数はstrcpy常にターミネータを追加しますが、strncpy場合によっては追加しない場合があります。

2 番目の質問については、宛先に十分なメモリが割り当てられていることを確認する必要があります。あなたの例では、十分なメモリが割り当てられておらず、バッファ オーバーフローが発生します。ターミネータを数えstrlenに文字列の長さを返すことに注意してください。また、引数を に反転しました。宛先は最初の引数です。strcpy

于 2014-03-12T07:43:34.207 に答える