初始化 char* 并为特定数量分配内存会添加 nullptr 字符 [关闭]

Posted

技术标签:

【中文标题】初始化 char* 并为特定数量分配内存会添加 nullptr 字符 [关闭]【英文标题】:Initializing char* and allocating memory for a specific amount adds nullptr characters [closed] 【发布时间】:2021-01-11 04:04:37 【问题描述】:

我正在尝试初始化一个 char* 并为特定数量的 chars(在本例中为 9 个)分配内存,但是当我运行程序并查看 char* 的值(通过使用断点)时,我可以看到添加了很多 nullptr 字符(如图所示)。这些字符从何而来?以及如何避免将它们添加到 char* 中? (我必须使用 char*)

char* Text = new char[9] '0', '0', '0', '0', '0', '0', '0', '0', '0';

我从这个 char* 得到的是:000000000yyyyYYY3/4\x15a\x17Y\v

SCREENSHOT OF CODE

非常感谢。

【问题讨论】:

此处的所有问题都应在问题本身中以纯文本形式包含所有相关信息。链接可以随时停止工作,使问题变得毫无意义。无法复制/粘贴以图像形式显示的代码、数据或错误;或编辑或编译以供进一步研究和调查。请edit这个问题,删除并替换所有链接和图像,并将所有相关信息作为纯文本。所有代码必须满足minimal reproducible example 的所有要求。您可以在此处找到许多其他以纯文本形式解释所有内容的问题,请以它们为例说明您的问题应该是什么样子。 调试器假定char* 变量指向一个以nul 结尾的字符串;但是您的指向实际上不是以 nul 结尾的字符序列,因此调试器继续读取并显示发生在数组之外的内存中的任何随机垃圾。这本身不是问题,只有当您使用 Text 以期望它被 nul 终止时才会成为问题。 @IgorTandetnik 实际上,这看起来不错(如果还没有重复的话) 如果您使用的是 Visual Studio 调试器,请参阅c++ - How to display a dynamically allocated array in the Visual Studio debugger? - Stack Overflow。 @IgorTandetnik 谢谢你的回答和解释!我真的很感激,因为我完全忘记了 nul 终止。 【参考方案1】:

初始化 char* 并为特定数量分配内存会添加 nullptr 字符

没有“nullptr 字符”这样的东西。您可能指的是空终止符,它不是指针,因此不是“nullptr”。

'0'

这不是空终止符文字。这是数字 0 的字符文字。空终止符的文字是 '\0'

我从这个 char* 中得到什么...

这可能是因为数组不是以空值结尾的,因此如果将它传递给需要以空值结尾的字符串的字符流,程序的行为将是不确定的。

【讨论】:

(仅当程序将其打印为字符串。OP 只是从调试器中查看它) @user202729 未定义的行为有多种形式。来自调试器的视图可以像其他任何东西一样未定义。

以上是关于初始化 char* 并为特定数量分配内存会添加 nullptr 字符 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将动态内存分配的数组调整为特定值?

t=(char*)malloc(n*sizeof(char))的含义?

指针 分配空间

C++的内存分配问题

初始化一个 Char*[]

9.PoolSubpage