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++;
    }
}

我用星号括起来的那行给了我一个分段错误。该文件绝对不是空的。我在我的程序的其他地方两次使用了同一行,但它在那里没有这样的行为。

4

3 回答 3

7

temp是整数;你必须通过它的地址:

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

在编译器中打开警告以捕获此类错误。

于 2012-09-20T06:03:29.993 回答
1

根据 C99 标准

7.19.6.2 fscanf 函数

%d
匹配一个可选带符号的十进制整数,其格式与 strtol 函数的主题序列的预期格式相同,base 参数的值为 10。

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 回答