0

メイン内では、ファイルから数値を取得する次の手順があります。

FILE *f = fopen("numbers.txt", "r");
if(f != NULL) {
    char line[BUFFER_SIZE];
    while(fgets(line, sizeof(line), f) != NULL) {
        char *start = line;
        int field;
        int n;
        while(sscanf(start, "%d", &field, &n) == 1) {
            printf("%d \n", field);
            start += n;
        }
    }
    fclose(f);
}

この上に整数配列 (int num[100] など) を追加すると、アクセス違反が発生します。

これが何らかの理由でファイルの読み取りに問題を引き起こしているようですが、現時点ではわかりません。

4

3 に答える 3

2
sscanf(start, "%d", &field, &n)

関数呼び出しの引数が多すぎます。

于 2013-06-30T00:15:19.637 に答える
0

あなたの「アクセス違反」は、変数「n」が初期化されていないという事実に間違いありません。あなたの sscanf(start, "%d", &field, &n) にはおそらく十分な書式指定子がないため、変数 'field' だけがその sscanf から設定されます。この sscanf は変数 n に触れていないため、まだ初期化されていません。

次に、この初期化されていない「n」をポインター「start」に追加すると、無効なアドレスになり、最終的にはアクセス違反エラーになります。

于 2013-06-30T00:23:09.253 に答える
0
while(sscanf(start, "%d", &field, &n)

Cをやったのは久しぶりですnが、文字の長さとしては記入されていないと思います。

ファイルから直接 fscanf を実行し、リターンをチェックして、何かが得られたかどうかを確認します。

于 2013-06-30T00:20:51.503 に答える