fscanf导致分段错误
我用星号括起来的那条线给了我一个分段错误。文件绝对不是空的。在我的程序中,我已经在其他地方使用了两次同一行代码,但在那里它的行为不是这样的fscanf导致分段错误,c,C,我用星号括起来的那条线给了我一个分段错误。文件绝对不是空的。在我的程序中,我已经在其他地方使用了两次同一行代码,但在那里它的行为不是这样的 temp是一个整数;您必须传递其地址: 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) {
temp
是一个整数;您必须传递其地址:
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++;
}
}
在编译器中打开警告以捕获这样的错误。
temp
是一个整数;您必须传递其地址:
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++;
}
}
在编译器中打开警告以捕获类似的错误。请在fscanf中使用&temp而不是temp
fscanf(fpi、%d、&temp) 请使用&temp而不是fscanf中的temp fscanf(fpi、%d、&temp) 根据C99标准 7.19.6.2 fscanf功能 %d
匹配格式与相同的可选带符号十进制整数 应为strtol函数的主题序列,值为10 对于基本参数
fscanf(fpi, "%d", &temp);
所以
是正确的。根据C99标准
7.19.6.2 fscanf功能
%d匹配格式与相同的可选带符号十进制整数 应为strtol函数的主题序列,值为10 对于基本参数
fscanf(fpi, "%d", &temp);
所以
是正确的。带有
Image1[i][j]==
的两行没有操作(除非它们可能是未定义的行为)。请始终检查I/O函数的返回码,以便您至少知道它们是否正常工作。您确实不想在(!feof(whatever))时使用
。在这种情况下,看起来您真的想要更接近的东西,而(1==fscanf(fpi,“%d”,&temp)){
(显然在循环中删除了对fscanf
的调用)。带有Image1[i][j]=
的两行没有操作(除非它们可能是未定义的行为)。请始终检查I/O函数的返回代码,以便您至少知道它们是否正常工作。您确实不想在(!feof(whatever))--任何时候使用。在这种情况下,看起来您确实想要更接近的东西,而(1==fscanf(fpi),%d,&temp)){
(显然,在循环中删除对fscanf
的调用)。你可能是对的,但不要只是说“请尝试”,而不做任何解释……你可能是对的,但不要只是说“请尝试”没有任何解释…哦,哇,我觉得自己很愚蠢:直接从屏幕底部的编译器:/aImageScale.c:210:警告:格式“%d”要求类型为“int*”,但参数3的类型为“int”!是的,这就是警告的用途!许多程序员只是忽略了它们——如果您了解警告的含义,那么警告在很多情况下都非常有用嘿,你在说:)那些因为不理解而忽略警告的人,我会称他们为学生…@nneonneoOh-wow我觉得自己很愚蠢:直接从屏幕底部的编译器:/aImageScale.c:210:警告:格式“%d”需要类型“int*”,但参数3有类型“int”是的,这就是警告的用途!许多程序员只是忽略它们——warnings在很多情况下都非常有用,如果你理解他们所说的:)那些因为不理解警告而忽略警告的人,我会叫学生…@nneonneo