我在将值复制到 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
但如果将最后一个 block 替换为
这个 for 循环基本上是等价的,它什么都不打印
for(int i = 0; i < 4; i++) {
d[i] = data[i];
}
谁能解释一下有什么区别?
最佳答案
两个程序都有 undefined behaviour因为您还没有为 d
分配内存。他们可以自由地以任何他们喜欢的方式行事,包括您描述的方式。
解决这个问题:
- 为
d
分配内存; - 确保将 NUL 终止符写入
d
。
附言将字符串文字分配给非 const
变量的方式在 C++ 中不再有效。使用
const char* data = "...";
^^^^^
附言由于您已将问题标记为 [c++]
,您可能应该使用 std::string
而不是原始 C 字符串。
关于c++ - 复制 C++ 字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19682575/