fscanf导致分段错误

时间:2012-09-20 06:01:23

标签: c

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

我用星号包围的那条线给了我一个分段错误。该文件绝对不是空的。我在我的程序中的其他地方使用过两次相同的行,并且它的行为并不像那样。

3 个答案:

答案 0 :(得分:7)

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

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

打开编译器中的警告以捕获这样的错误。

答案 1 :(得分:1)

根据C99 Std

7.19.6.2 fscanf功能

%d
匹配可选的带符号十进制整数,其格式与 期望strtol函数的主题序列的值为10 对于基本参数。

The corresponding argument shall be a pointer to signed integer.

所以

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

是正确的。

答案 2 :(得分:0)

请在fscanf中使用& temp代替temp

fscanf(fpi,“%d”,& temp);