繁体   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