簡體   English   中英

文件中C的分段錯誤

[英]Segmentation fault in C with file

在函數imprimir中獲取第二個文件時,我出現了段錯誤,我不知道發生了什么,因為他打開並讀取了圖片,但沒有其他文件,對我來說很困惑,請幫助我

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    char nombre[40];
    int creditos;
    float nota;
} curso;

int conteo(FILE *_entrada);
void semestre(FILE *_entrada,curso *_materias,int *_cantidad,int *_ganadas,int *_perdidas,float *_promedio);
void imprimir(curso *_materias,int *_cantidad,int *_ganadas, int *_perdidas,float *_promedio);

int main(int argc, char *argv[])
{
    int ganadas=0;
    int perdidas=0;
    float promedio=0.0;
    int cantidad=0;
    char *archivoEntrada;
    curso *materias;
    printf("Archivo de entrada \n");
    scanf("%s",archivoEntrada);
    FILE *entrada;
    entrada=fopen(archivoEntrada,"r");
    if(entrada==NULL)
    {
        printf("No se logro abrir el archivo de entrada\n");
        exit(EXIT_FAILURE);
    }
    cantidad=conteo(entrada);
    printf("El numero de materias es: %d \n",cantidad);

    materias=(curso *)malloc(sizeof(curso)*cantidad);

    semestre(entrada,materias,&cantidad,&ganadas,&perdidas,&promedio);
    imprimir(materias,&cantidad,&ganadas,&perdidas,&promedio);
    free(materias);
}

int conteo(FILE *_entrada)
{
    int i=0;
    char auxiliar[40];
    while(!feof(_entrada))
    {
        fgets(auxiliar,40,_entrada);
        i++;
    }
    rewind(_entrada);
    return i/3;
}

void semestre(FILE *_entrada,curso *_materias,int *_cantidad,int *_ganadas,int *_perdidas,float *_promedio)
{
    int i=0;
    int sumaCreditos=0;
    float sumaNotas=0.0;
    while(i<*_cantidad)
    {
        fscanf(_entrada, "%s", _materias->nombre);
        fscanf(_entrada, "%d", &_materias->creditos);
        sumaCreditos=sumaCreditos+(_materias->creditos);
        fscanf(_entrada, "%f", &_materias->nota);
        if((_materias->nota)>3.0)
        {
            *_ganadas=(*_ganadas)+1;
        }
    }
}

void imprimir(curso *_materias,int *_cantidad,int *_ganadas, int *_perdidas,float *_promedio)
{
    fflush(stdin);
    printf("Ganadas %d \n",*_ganadas);
    printf("perdidas %d \n",*_perdidas);
    printf("prom %f \n",*_promedio);
    char *archivoSalida;
    FILE *salida;
    printf("Archivo de salida \n");
    scanf("%s",archivoSalida);
    salida=fopen(archivoSalida,"w");
    if(salida==NULL)
    {
        printf("No se logro abrir el archivo de salida\n");
        exit(EXIT_FAILURE);
    }
    //Implementacion imprimir en archivo salida.txt
}

你有

char *archivoSalida;

接着

scanf("%s",archivoSalida);

這里的問題是指針archivoSalida實際上沒有指向任何特殊的地方。 未初始化的局部變量(如archivoSalida是)具有不確定的值。 在沒有初始化的情況下使用它們會導致行為未定義 ,這是崩潰的非常常見的原因。

相反,您可能想使用固定大小的數組:

char archivoSalida[256];
...
scanf("%255s",archivoSalida);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM