0

を使用してファイルから読み込もうとしていますfile.get()が、最初の行でスタックしているようです。入力ファイルは次のようなものです:

1234,56
7891,01
.......

これは私のコードです:

char* n1 = new char[5];
char* n2 = new char[3];
std::ifstream data("input_file");
while (i < 4) {
    data.get(n1, 5);
    printf("%ld\n", data.gcount());
    data.get(n2, 3);
    printf("%ld\n", data.gcount());
    //read newline
    data.get(&ch, 2);
    printf("%ld\n", data.gcount());
    printf("n1= %s, n2 = %s\n", n1, n2+1);
}

出力:

0
0
0
n1= 1234, n2 = 56
0
0
0
n1= 1234, n2 = 56
0
0
0
n1= 1234, n2 = 56

私はこれを理解することができません。

4

2 に答える 2

0

ここで 1 つの問題があります。

data.get(&ch, 2);

ch以前にどこかで次のように定義していると仮定します

char ch;

改行は に格納されますが、 の次のアドレスにch終端'\0'が書き込まれ、chたまたまそこに存在する変数が破損します。

これを次のように変更します。

char ch[2];

data.get(ch, 2);
于 2013-05-14T15:39:19.733 に答える
0

get(char*, streamsize) は、改行区切り文字に遭遇するとすぐにスタックします。次の行に進むには getline() を使用する必要があります。

また、2 番目の get() は、ストリームから 2 文字しか読み取りません (つまり、最初の行の ",56" ではなく ",5" を読み取ります)。

于 2013-05-14T16:06:45.487 に答える