0

値を char ポインターにコピーするときにこの問題が発生します。私が書いたら

char* data = "abcdef";
char* d;

d[0] = data[0];
d[1] = data[1];
d[2] = data[2];
d[3] = data[3];
printf("%s ", d);

出力は次のとおりですabcd が、最後のブロックを基本的に同等の this for ループに置き換えると、何も出力されません

for(int i = 0; i < 4; i++) {
   d[i] = data[i];
}

誰が違いを説明できますか?

4

1 に答える 1

9

にメモリを割り当てていないため、両方のプログラムの動作は未定義dです。彼らは、あなたが説明した方法を含め、好きなように自由に振る舞うことができます.

これを修正するには:

  1. にメモリを割り当てますd
  2. に NUL ターミネータを書き込んでくださいd

PS 文字列リテラルを非const変数に割り当てる方法は、C++ では無効になりました。使用する

const char* data = "...";
^^^^^

PPS質問[c++]にタグを付けたので、おそらくstd::string生のC文字列の代わりに使用する必要があります。

于 2013-10-30T12:43:13.507 に答える