【发布时间】:2015-01-05 06:26:42
【问题描述】:
Windows 7、32 位、MSVS 2010
我的理解是当你这样做时:
char szString[100] = "string";
编译器需要 101 个字符空格。然后操作系统将在 RAM 中分配这 101 个字符空间。
现在我在 szString 中放入 7 个字符(包括 null),但 szString 的总大小为 100。所以我期望打印 szString 应该导致 string 加上从位置 szString[7] 获取的 93 个垃圾值到szString[99]。但 cout 的行为并非如此。它只打印string
那么机制是什么?我的理解错了吗?
int main()
{
using namespace std;
char szString[100] = "string";
cout << szString;
return 0;
}
输出
string
【问题讨论】:
-
正在打印整个字符串。字符缓冲区包含一个六字符的字符串、一个 nul 终止符,然后是一堆从未初始化过的垃圾。
-
@DavidSchwartz 什么是“一堆垃圾”?一些价值观?但是我们从不初始化值,对吧?我们初始化内存位置。我对吗 ?如果缓冲区有所有这些垃圾,为什么它没有到达控制台? (我认为缓冲区只有值直到 NULL,然后这个缓冲区由 cout 打印)
-
垃圾在字符串后面。你让
cout打印字符串,它确实做到了。