我目前正在Xcode上编写一个C ++程序。以下是我正在运行的代码的片段:
char myString[3];
cin >> myString;
cout << myString << endl;
代码非常简单。但是,当我输入长度超过2个字符的字符串时,字符串仍然接受它们。为什么字符串只存储两个字符加上空终止符?
谢谢!
因为它不能。当您通过值将数组传递给函数(operator>>
计数!)时,您实际上只是将指针传递给数组。 char*
不知道它指向的缓冲区的大小。
从理论上讲,可以设计标准库,使其具有一个参考数组的函数模板,如:
template <size_t N>
operator>>(char (&input)[N]);
但是,它确实没有。您可以建议将其添加到C ++标准委员会中。
无论如何,这里不需要格式化提取。喜欢这样的东西:
cin.read(&myString[0], sizeof(myString)-1);
...或使用实际的字符串。