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++;
}
}
我用星号包围的那条线给了我一个分段错误。该文件绝对不是空的。我在我的程序中的其他地方使用过两次相同的行,并且它的行为并不像那样。
答案 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);