2

Mac OSX Snow Leopard で std::getline に問題があります。何らかの理由で入力のサイズが制限されていますが、Debian/Ubuntu ではサイズは無制限ですか?

std::getline(std::cin, input)

制限に関する手がかりはありますか?

4

2 に答える 2

1

プラットフォーム (Windows/Unix/Mac OSX) 間で異なるのは std::getline ではありません。これは、さまざまなプラットフォームで行末記号がどのように定義されるかです。Windows ベースの場合は '\n\r'、UNIX ベースの場合は '\n'、MacOS プラットフォームの場合は ('\r'?) です。MacOS エディターを使用してテキスト ファイル (またはテスト ファイル) を生成し、std::getline を使用して入力のサイズにまだ制限があるかどうかを調べてみてください。

于 2010-10-11T21:26:11.910 に答える
1

C++ 標準は、getline関数について次のように述べています。


21.3.7.9 挿入子と抽出子 [lib.string.io]

template<class charT, class traits, class Allocator>
  basic_istream<charT,traits>&
    getline(basic_istream<charT,traits>& is,
            basic_string<charT,traits,Allocator>& str,
            charT delim);

効果:kであるかのように歩哨オブジェクトを構築することから始めますbasic_istream<charT,traits>::sentry k(is)bool(k)が true の 場合、次のいずれかが発生するまで、 を呼び出し てstr.erase()から文字を抽出し、呼び出しによるかのように文字isを追加します。strstr.append(1,c)

  • ファイルの終わりが入力シーケンスで発生します (この場合、getline関数は を呼び出します is.setstate(ios_base::eofbit))。
  • c == delim次に利用可能な入力文字c(この場合、c抽出されますが追加されません) (27.4.5.3)
  • str.max_size()文字が格納されます (この場合、関数は を呼び出しますis.setstate(ios_base::failbit)) (27.4.5.3)

したがって、短い行が表示される唯一の理由は、(a) C++ の実装が標準に準拠していない (ほとんどありません)、ファイルの終わりに達している、または 4 ギガバイトの行を読み取っているということです。 (非常にありそうもない)。

于 2010-10-11T21:27:45.523 に答える