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()64 ではなく63 文字を にコピーするchar * inputと、次の while(cin) 反復で 64r 番目の文字が表示されることがわかります。この動作はオーバーライドできますか? nul配列に64 文字すべてと NO が必要です。

4

1 に答える 1

3

operator>>(istraem&, char*)常にヌルバイトを書き込みます。

C++2003、27.6.1.2.3/7 (強調を追加):

次のいずれかが発生するまで、文字が抽出されて保存されます。

  • n-1 文字が格納されます。
  • 入力シーケンスでファイルの終わりが発生します。
  • ct.is(ct.space,c) は、次に使用可能な入力文字 c に対して true です。ここで、ct は use_facet >(in.getloc()) です。

Operator>>次に、null バイト(charT()) を次の位置に格納します。これは、文字が抽出されなかった場合は最初の位置になる可能性があります。operator>> は width(0) を呼び出します。

ほぼ希望どおりの動作を得ることができます

  • 65 バイトの配列を割り当てて を呼び出すsetw(65)、または
  • コールstd::cin.read(input, 64)

2 つのソリューションは同一ではないことに注意してください。Usingstd::cin >> inputは空白を異なる方法で扱いますstd::cin.read()

于 2012-05-30T14:54:49.630 に答える