input = new char[64]();
std::cout << "wait for cin" << std::endl;
while (std::cin >> std::setw(64) >> input)
{
std::cout << "input : " << input << std::endl;
...
我向你保证setw()
将63个字符复制到char * input
而不是64,我看到下一个(cin)迭代时显示64rth字符。这种行为可以被覆盖吗?我希望我的所有64个字符在我的数组中都没有nul
。
答案 0 :(得分:3)
operator>>(istraem&, char*)
将始终写入nul字节。
C ++ 2003,27.6.1.2.3 / 7(强调补充):
提取并存储字符,直到出现以下任何一种情况:
- 存储n-1个字符;
- 文件末尾出现在输入序列上;
- ct.is(ct.space,c)对于下一个可用的输入字符c为真,其中ct为 use_facet&gt;(in.getloc())。
Operator>>
然后在下一个位置存储一个空字节(charT()),如果没有,可能是第一个位置 提取了字符。运营商GT;&GT;然后调用width(0)。
您几乎可以获得所需的行为
setw(65)
或std::cin.read(input, 64)
。请注意,这两种解决方案并不相同。使用std::cin >> input
处理空格的方式与std::cin.read()
不同。