【发布时间】:2021-03-19 01:29:33
【问题描述】:
我想在 C++ 中为 char 数组(字符串)分配空间。当我为 10 个字符分配内存时,我还可以为 char 数组分配更多字符。当我打印它时,它会从数组中给出一些额外分配的字符。
#include <string.h>
using namespace std;
int main()
{
char *name = new char[10];
strcpy(name, "MoreThanTenCharacters");
cout << name << endl;
}
虽然分配的内存是 10 个字符,但我可以分配更多。打印给出完全相同的值。其背后的逻辑是什么?
【问题讨论】:
-
您正在调用未定义的行为。 C++ 不像其他语言那样在内存管理方面进行手动操作。为什么?表现。任何类型的检查 = 附加指令 = 执行它们所花费的时间。
-
<string.h>是 C 标头。在 C++ 中,您宁愿使用<string>以及其中的所有好东西(而相应的 C++ 标头是<cstring>) -
这能回答你的问题吗? Undefined, unspecified and implementation-defined behavior 仔细查看已接受答案中的第一个示例。
-
如果你解释你期望你的程序做什么,这个问题可能会更积极。你认为程序应该打印一条消息吗?你认为
strcpy应该在 10 个字符后停止吗?你认为代码不应该编译吗?
标签: c++ dynamic-memory-allocation