C语言 阅读文件并尝试打印信息时出现分段错误

rn0zuynd  于 2023-01-04  发布在  其他
关注(0)|答案(1)|浏览(118)

我写了一个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
91zkwejq

91zkwejq1#

int *h,*w;

hw是不确定的,它们不指向任何有意义的东西。不确定的指针导致未定义的行为。
您可以将它们声明为:

int h, w;

然后将它们传递给letArq,如下所示:

lerArq(I, filename, &h, &w);

或者在需要时声明它们。

  • 旁注:* I是未使用的参数。

scanffscanf返回了一些内容,请检查。
return 0return 1分别等效于return EXIT_SUCCESSreturn EXIT_FAILURE
letArq的返回值未被使用。

相关问题