我在读C ++的Primer Plus(第6版)和我已经遇到了一些示例代码在第4章,我有一个问题关于:
清单4.2 strings.cpp
// strings.cpp -- storing strings in an array
#include <iostream>
#include <cstring> // for the strlen() function
int main()
{
using namespace std;
const int Size = 15;
char name1[Size]; // empty array
char name2[Size] = "C++owboy"; // initialized array
// NOTE: some implementations may require the static keyword
// to initialize the array name2
cout << "Howdy! I'm " << name2;
cout << "! What's your name?\n";
cin >> name1;
cout << "Well, " << name1 << ", your name has ";
cout << strlen(name1) << " letters and is stored\n";
cout << "in an array of " << sizeof(name1) << " bytes.\n";
cout << "Your initial is " << name1[0] << ".\n";
name2[3] = '\0'; // set to null character
cout << "Here are the first 3 characters of my name: ";
cout << name2 << endl;
return 0;
}
该代码本身不会造成任何混乱,但我一直在通过运行它,我受到了一定的场景迷惑。
名1初始化为字符数组的15个元素的长度 - 我是正确的思维本应持有的字符串长度为14个字符? 最终焦应预留一个字符串结束,对不对?
如果我输入我的名字作为HowCanIPossiblyFitThisEntireStringIn? ,我得到下面的输出:
你好! 我是C ++ owboy! 你叫什么名字?
HowCanIPossiblyFitThisEntireStringIn?
那么,HowCanIPossiblyFitThisEntireStringIn?你的名字有37个字母和存储
在15个字节的阵列。
您最初是H.
这里有我的名字的前3个字符:C ++
如何我进入全名被存储在哪里? 如果我通过代码,CIN读入后NAME1,Visual Studio中告诉我,它包含的元素0 - 14日,随着最后一个是字符“Y”(“HowCanIPossibly ...)我想从这个假设任何额外费用。输入的数据已经被截断而失败,但这显然并非如此,因为下面COUT成功写全名到控制台。
为了好奇,任何人都可以赐教,以这里发生了什么? 为了记录在案,我使用的Visual Studio 2012快。