当我输出我的阵列时,我总是得到像这样的'ýýýýý«««««««««îþþþ'的垃圾值。我做错了什么?
void func()
{
const int size = 100;
char * buffer = new char[size];
for(int i=0; i<size; i++)
buffer[i] = ' ';
cout<<buffer;
}
但是,如果我使用for循环输出缓冲区,则没有垃圾值。
答案 0 :(得分:7)
因为您没有空终止缓冲区,std::cout.operator<<(char*)
将尝试查找\0
作为其终止字符。
正如评论中指出的那样,随意将\0
附加到缓冲区的末尾:)。
答案 1 :(得分:0)
ScarletAmaranth是对的。 C样式字符串(char数组)必须以char'\ 0'结束。这就是使用char数组的函数(在本例中为cout)知道字符串何时在内存中完成的方式。如果忘记数组末尾的'\ 0'字符,cout将打印数组中的所有字符,然后在数组后打印内存中的所有数据。这些其他数据都是垃圾,这就是你看到这些奇怪角色的原因。
如果使用字符串类型(更多C ++样式)而不是char数组,则不会出现此问题,因为字符串类型不使用'\ 0'作为字符串分隔符。
另一方面,当使用循环迭代数组的100个元素时,您不会看到垃圾,因为您只打印了这100个字符。我的意思是,你可以准确控制你正在打印的内容并知道何时停止,而不是让cout函数找出何时停止打印。