我写了一个C代码来读取一个.txt文件,但是我一直有这个分段错误,我不能弄清楚是怎么回事,我可以请一些帮助?
下面是代码。更多信息请参见下文。
#include <stdlib.h>
#include <stdio.h>
#define MAX 256
int lerArq(int **I, char filename[MAX],int *h,int *w);
int main(){
char option;
char filename[MAX];
int *h,*w;
int **I;
int i,j;
printf("Q Quit (terminar o programa) \n L Ler um arquivo de imagens \n S Salvar a imagem em arquivo \n M Manter a imagem-entrada anterior \n B Binarizar a imagem-entrada \n C Calcular Contorno da imagem-entrada \n F Filtrar a imagem-entrada \n I Inverter a imagem-entrada \n R Rotular a imagem-entrada \n");
printf("Digite a opção: \n");
scanf("%c", &option);
if(option=='l' || option=='L'){
printf("Digite o nome do aquivo: \n");
scanf("%s", filename);
lerArq(I,filename,h,w);
}
return 0;
}
int lerArq(int **I, char filename[MAX],int *h,int *w){
FILE *arq;
arq=fopen(filename, "r");
char line[5];
int i,j;
if(arq == NULL) {
printf("ERRO: Não foi possível localizar o arquivo: %s! \n", filename);
return 0;
}
fscanf(arq, "%s", line);
fscanf(arq, "%d %d", w, h);
fscanf(arq, "%s", line);
printf("%d %d", *h, *w);
fclose(arq);
return 1;
}
我正在打开的文件具有以下方面:第一行和第三行在这个时候是不相关的,它们只代表图像的格式(这个文件代表一个白色图像)。第二行,代表矩阵的行数和列数。
结果是当我试图打印行数和列数时,我得到了这个错误,分段错误。
P2
10 10
255
0 0 0 0 0 0 0 0 0 0
0 1 1 0 0 0 1 1 1 0
1 1 0 0 1 0 0 1 1 0
0 0 1 0 0 1 0 0 1 0
0 0 1 0 0 1 0 0 1 0
0 0 0 1 0 1 0 0 1 0
0 0 0 0 0 1 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0
1条答案
按热度按时间91zkwejq1#
h
和w
是不确定的,它们不指向任何有意义的东西。不确定的指针导致未定义的行为。您可以将它们声明为:
然后将它们传递给
letArq
,如下所示:或者在需要时声明它们。
I
是未使用的参数。scanf
和fscanf
返回了一些内容,请检查。return 0
和return 1
分别等效于return EXIT_SUCCESS
和return EXIT_FAILURE
。letArq
的返回值未被使用。