std :: setw()在我的数组末尾插入一个\ 0

时间:2012-05-30 14:47:41

标签: c++ std setw

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

1 个答案:

答案 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)。

您几乎可以获得所需的行为

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

请注意,这两种解决方案并不相同。使用std::cin >> input处理空格的方式与std::cin.read()不同。