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/