1
void RdImage(FILE *fpi, char Image1[MAXROW][MAXCOL], int Nrows, int Ncols) {
    int i = 0, j = 0, temp;

    while (!feof(fpi)) {
        if (i % Nrows == 0) {
            i = 0; 
            j++;
        }

        **fscanf(fpi, "%d", temp);**     

        if (temp == 1) {
            Image1[i][j] == AP;
        } else {
            Image1[i][j] == PL;
        }
        i++;
    }
}

アスタリスクで囲んだ行で、セグメンテーション違反が発生しています。ファイルは間違いなく空ではありません。プログラムの他の場所で同じ行を 2 回使用しましたが、そこではこのように動作しません。

4

3 に答える 3

7

temp整数です。そのアドレスを渡す必要があります:

fscanf(fpi, "%d", &temp);

このようなバグをキャッチするには、コンパイラで警告をオンにします。

于 2012-09-20T06:03:29.993 に答える
1

C99Stdによる

7.19.6.2fscanf関数

%d
オプションで符号付きの10進整数に一致します。その形式は、基本引数の値が10のstrtol関数のサブジェクトシーケンスで期待されるものと同じです。

The corresponding argument shall be a pointer to signed integer.

それで

fscanf(fpi, "%d", &temp); //Here Address of temp is passed.

正しいものです。

于 2012-09-20T06:14:18.927 に答える
0

fscanf で temp の代わりに &temp を使用してください

fscanf(fpi, "%d", &temp);

于 2012-09-20T06:04:51.300 に答える