c++ - 在 C 中复制字符串时为空终止字符分配空间?

标签 c++ c-strings

const char* src = "你好";

调用 strlen(src); 返回大小 5...

现在说我这样做:

char* dest = new char[strlen(src)];
strcpy(dest, src);

这似乎不应该起作用,但当我输出所有内容时它看起来是正确的。似乎我没有为最后的空终止符分配空间......这是对的吗?谢谢

最佳答案

您没有为终止符分配空间是正确的,但是不这样做并不一定会导致您的程序失败。您可能会覆盖堆上的以下信息,或者您的堆管理器会将分配大小四舍五入为 16 字节的倍数或类似的东西,因此您不一定会看到此错误的任何可见影响。

如果您在 Valgrind 下运行您的程序或其他堆调试器,您可能能够更快地检测到此问题。

关于c++ - 在 C 中复制字符串时为空终止字符分配空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1581348/

相关文章:

c++ - 从字符数组中提取字符串

c++ - 轻松初始化 std::strings 的 std::list?

c++ - 网络游戏?

c - 如何在c编程中将出生日期格式作为字符串输入

c++ - 在 C++ 中读取和打印输入和 C 字符串

C 检查重复的字符串条目

c++ - 为什么指针不继承字符串文字的固定大小

可以在项目的任何文件中使用的C++变量

c++ - 将 double * 转换为 std::vector<double> 给我错误

c++ - 修改 c 字符串