0
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 个,并且我看到第 64 个字符显示在下一次 while(cin) 迭代中。可以覆盖此行为吗?我想要nul我的数组中的所有 64 个字符和 NO。

4

1 回答 1

3

operator>>(istraem&, char*)始终写入 nul 字节。

C++2003, 27.6.1.2.3/7(强调添加):

字符被提取和存储,直到发生以下任何情况:

  • 存储 n-1 个字符;
  • 文件结尾发生在输入序列上;
  • 对于下一个可用的输入字符 c,ct.is(ct.space,c) 为真,其中 ct 是 use_facet >(in.getloc())。

Operator>>然后在下一个位置存储一个空字节(charT()),如果没有提取字符,这可能是第一个位置。operator>> 然后调用 width(0)。

你几乎可以得到你想要的行为

  • 分配一个 65 字节的数组并调用setw(65),或
  • 打电话std::cin.read(input, 64)

请注意,这两种解决方案并不相同。Usingstd::cin >> input对待空白的方式与对待空白的方式不同std::cin.read()

于 2012-05-30T14:54:49.630 回答