2

次のように、標準からファイルを読み取るように要求されました。

./gscheck < testfile

gscheck は、コンパイル済みの実行可能ファイルの名前です。とにかく、関数 cin.getline() を使用して各行を文字配列に読み込む必要があります。私はこれを行う方法を知っています、

char line[250];
while (cin.getline(line, 250))
{
    Do stuff;
}

しかし、最終的には、行ごとに何もしたくありません。すべての行を 1 つの巨大な文字配列に連結したいと考えています。上記の方法を使用して、各行を順番に含み、改行を含むより大きな文字配列を作成して、ファイルから本質的に「丸呑み」し、文字ごとに解析しますが、文字列クラス。

4

4 に答える 4

1

では、これはどうですか:

char file[2000];
char *end=file+1998;
char *ptr=file;
while (!cin.eof() && ptr < end) {
  cin.getline(ptr, end-ptr)
  ptr += strlen(ptr);
  *ptr++ = "\n";
  *ptr = 0;
}
于 2012-10-01T00:58:17.970 に答える
1

動的メモリを使用しないという制限がある場合に備えて、どの std::string が確実に使用されていますか:

char a[VERY_BIG_SIZE_ENOUGH_FOR_FILE];
std::cin.read(a, VERY_BIG_SIZE_JUST_ENOUGH_FOR_FILE - 1);
a[VERY_BIG_SIZE_JUST_ENOUGH_FOR_FILE - 1] = '\0';
于 2012-10-01T01:01:19.340 に答える
1

@KerrekSBの回答に基づいて、std::ostrstream文字配列を使用する deprecated を使用できます(実際には aですchar *strlen、配列として簡単に機能させることができます)。

std::ostrstream oss;
oss <<std::cin.rdbuf();
return oss.str();
于 2012-10-01T01:04:31.520 に答える
0

やらないでください。

いやだっていうだけだよ。

「文字配列」を使用しないでください。

真剣に。

を使用しstd::stringます。

std::string result;

for (std::string line; std::getline(std::cin, line); )
{
    result += line;
}

しかし、実際に行を解析せずにすべてを読み取りたい(代わりに改行を保持する) 場合は、入力バッファーに直接アクセスする方が簡単な場合があります。

std::ostringstream oss;
oss << std::cin.rdbuf();
return oss.str();
于 2012-10-01T00:48:26.450 に答える