C++:为什么没有打印整个字符串
C++: Why the whole string is not getting printed?
Windows 7, 32 位 , MSVS 2010
我的理解是,当你这样做时:
char szString[100] = "string";
编译器需要 101 个字符的空格。 然后,操作系统将在 RAM 中分配这 101 个字符的空间。
现在我在 szString 中输入 7 个字符(包括 null),但 szString 的总大小为 100。所以我预计打印 szString 应该会导致从位置 szString[7] 到 szString[99] 的 string
加上 93 个垃圾值。但cout并没有这样做。 它只打印string
那么机制是什么呢? 我的理解有误吗?
int main()
{
using namespace std;
char szString[100] = "string";
cout << szString;
return 0;
}
输出
string
So I am expecting that printing szString should result in string plus 93 garbage values taken from location szString[7] to szString[99].
这是一个错误的假设。字符串是以 \0 结尾的 null 字符数组,在 ASCII 中称为 NULL。
尝试打印最后 2 个值:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
using namespace std;
char szString[100] = "string";
int len1 = szString[5], len2 = szString[6];
cout << len1 << endl;
cout << len2 << endl;
return 0;
}
我们得到 ascii 值 103 和 0。
这里有一篇关于它的简短文章,但要简要解释一下:
以字符序列表示的字符串文本(如 "string"
)按照惯例是 null 结尾,这意味着在创建时,