gpt4 book ai didi

c++ - std::setw() 在我的数组末尾插入 a\0

转载 作者:行者123 更新时间:2023-11-28 00:56:44 24 4
gpt4 key购买 nike

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

最佳答案

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

C++2003, 27.6.1.2.3/7(添加了重点):

Characters are extracted and stored until any of the following occurs:

  • n-1 characters are stored;
  • end of file occurs on the input sequence;
  • ct.is(ct.space,c) is true for the next available input character c, where ct is use_facet >(in.getloc()).

Operator>> then stores a null byte (charT()) in the next position, which may be the first position if no characters were extracted. operator>> then calls width(0).

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

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

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

关于c++ - std::setw() 在我的数组末尾插入 a\0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10818690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com