tldr;为基本数组分配内存与括号之间没有它们有什么区别? e.g。
char * text = new char[size];
VS
char * text = new char[size]();
全文:
我今天遇到了一个奇怪的问题,我写的是一些代码。我创建了一个包含cstring成员变量text的类。
Class SomeClass
{
private:
char * text;
...
}
所述类的构造函数将使用动态分配的内存初始化文本,如此
text = new char[size];
运行时,我的程序会提示用户输入,将输入存储在cstring中,然后将其显示给用户。问题是,当我使用cout向用户显示cstring时,垃圾会出现在字符串的末尾。当我使用调试器逐步执行程序时,错误消失了,cstring将正常打印。问题只出现在运行程序时,而不是在使用调试器时出现。
在确保我的cstring具有适当的空终止字符后,为用户输入分配了足够的内存,检查了数组边界以及许多其他内容,我最后通过在分配方括号后添加括号来解决问题cstring的内存如此
text = new char[size]();
为什么这会解决我的问题?为基本数组分配内存与括号之间有没有它们之间的区别是什么?
答案 0 :(得分:1)
感谢Igor Tandetnik和M.M.在评论中。括号将数组中的字符初始化为0而不是垃圾。这意味着cout将在遇到的第一个0处停止打印字符,而不是打印字符串中包含的所有垃圾。