0

我查看了一个setw关于 cppreference 的示例。它用于setw设置宽度。在这个例子中,它假设提取一个字符串为'arr',它设置宽度为6。但是为什么'arr'只有5个字符,为什么结果是“hello”而不是“hello”?谢谢您的回答。

代码来源:std::setw

  #include <sstream>
  #include <iostream>
  #include <iomanip>

  int main()
  {
      std::cout << "no setw:" << 42 << '\n'
                << "setw(6):" << std::setw(6) << 42 << '\n'
                << "setw(6), several elements: " << 89 << std::setw(6) << 12 << 34 << '\n';
      std::istringstream is("hello, world");
      char arr[10];
      is >> std::setw(6) >> arr;
      std::cout << "Input from \"" << is.str() << "\" with setw(6) gave \""
                << arr << "\"\n";
  }

输出:

  no setw:42
  setw(6):    42
  setw(6), several elements: 89    1234
  Input from "hello, world" with setw(6) gave "hello"
4

2 回答 2

0

arr不是一个std::string,而是一个数组char,因此是 Serge 的解释。将arr是一个std::string,然后它将包含“你好”。

于 2020-12-10T10:13:26.470 回答
0

arr实际上填充了6 个字符,5 个用于hello world,第 6 个是终止 NULL 字符。当您提取到char数组中时,C++ 流仅接收一个char指针(数组衰减为函数调用中的指针)并假定它setw用于传递数组的大小。所以最后一个位置是为终止的空值保留的。

于 2018-05-07T14:07:23.080 回答