es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Inicializando un puntero nulo antes de fscanf.

Tengo que hacer un programa que lea un archivo .txt grande en un AVL, y para ello, necesito leer todos los datos formateados en el documento de texto y ponerlos en un AVL. Sin embargo, cada vez que intento inicializar el AVL en mi código (un puntero NULL) se rompe el código una vez que llega a la función fscanf que usé para recopilar las cadenas del archivo .txt. Hice esta demostración aquí mismo, y creo que estoy bastante cerca de la fuente del problema. Lo reduje a estar relacionado con la inicialización de un puntero con un valor NULL antes de la función fscanf. Pero ¿cómo lo arreglo?

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

int main() {

    FILE * filePointer = fopen("lexico_shuf.txt", "r");

    if(!filePointer) {
        printf("no se puede abrir el archivo");
        exit(101);
    }

    char *lexiconWord;
    float polarity;

    int *a = NULL;
    printf("antes del while");
    while (!feof(filePointer)) {
        fscanf(filePointer, "%[^;];%f\n", lexiconWord, &polarity);
        printf("| (%s) (%.1f) |", lexiconWord, polarity);
    }
    printf("después del while");

}

Lo único que se imprime en la pantalla es el printf “antes del while”, y no el “después del while”. Y el programa devuelve un número aleatorio.</string.h></stdlib.h></stdio.h>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con la inicialización del puntero “a” con un valor “NULL” antes de la función “fscanf”. Esto provoca que el programa se rompa al alcanzar la función “fscanf”.

    Para solucionarlo, puedes eliminar la línea “int *a = NULL;” de tu código. Esto debería permitir que el programa se ejecute correctamente y que se imprima la salida esperada.

Comments are closed.