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 回答