gpt4 book ai didi

c++ - 基本的 C++ 内存分配和 strlen

转载 作者:太空狗 更新时间:2023-10-29 23:47:36 26 4
gpt4 key购买 nike

int _tmain(int argc, _TCHAR* argv[])
{

char* myArr = new char[5];

cout << strlen(myArr) << endl;
return 0;
}

为什么它打印出 12(而不是 5)?

编辑:添加 myArr[5] = '\0';解决问题。但它需要不属于我的内存。可以吗?

最佳答案

内存未初始化。它在堆上有“随机”数据,所以在第一个零之前恰好有 12 个非零字节(并且它正在读取超过分配的长度)。

分配的内存不包含(从应用程序的角度来看)长度信息。如果您在第一个字节中放置 0,则长度将报告为零:

myArr[0] = 0;

如果您如下声明它(使用堆栈上的内存),sizeof 运算符将给出“预期”值 5。正如 delnan 指出的(谢谢),重要的是要注意 sizeof 不会返回数组的长度而不是字节数。

char myArr[5];
cout << sizeof( myArr ) << endl;

关于c++ - 基本的 C++ 内存分配和 strlen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4838369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com