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.

Cadena de longitud indeterminada c

Hola, estaba tratando de crear un arreglo de cadenas de longitud indeterminada en c.
Este es mi código:

int main()
{
    int lineCount=linesCount();
    char text[lineCount][10];
    printf("%d",lineCount);
    FILE *  fpointer = fopen("test.txt","r");
    fgets(text,10,fpointer);
    fclose(fpointer);
    printf("%s",text);
    return 0;
}

Me gustaría reemplazar el 10 en

char text[lineCount][10];

Mi código lee un archivo y ya hice la cantidad de líneas dinámicas.
Dado que la longitud de línea es impredecible, me gustaría reemplazar 10 por algo dinámico.
Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para crear un array de strings con una longitud indeterminada en C, se puede utilizar la asignación dinámica de memoria. En lugar de definir el tamaño del array durante la compilación, se puede asignar la memoria en tiempo de ejecución utilizando malloc().

    Aquí se presenta un fragmento de código actualizado que utiliza malloc() para asignar dinámicamente memoria a cada string del array:

    int main()
    {
        int cantidadDeLineas=cantidadDeLineas();
        char **texto = malloc(cantidadDeLineas * sizeof(char *));
        for (int i = 0; i < cantidadDeLineas; i++)
        {
            texto[i] = malloc(LONGITUD_MAX_LINEA * sizeof(char));
        }
        printf("%d",cantidadDeLineas);
        FILE *fpointer = fopen("test.txt","r");
        for (int i = 0; i < cantidadDeLineas; i++)
        {
            fgets(texto[i], LONGITUD_MAX_LINEA, fpointer);
        }
        fclose(fpointer);
        for (int i = 0; i < cantidadDeLineas; i++)
        {
            printf("%s",texto[i]);
        }
        for (int i = 0; i < cantidadDeLineas; i++)
        {
            free(texto[i]);
        }
        free(texto);
        return 0;
    }
    

    En este código, LONGITUD_MAX_LINEA es una constante que representa la longitud máxima de cada línea en el archivo. Está definida al comienzo del programa.

    En primer lugar, el programa asigna memoria para un array de punteros char * utilizando malloc(). Cada puntero apuntará a un string en el array.

    Luego, un bucle asigna memoria para cada string en el array utilizando malloc(). El tamaño de cada string es de LONGITUD_MAX_LINEA bytes.

    A continuación, el programa lee cada línea del archivo utilizando fgets() y la almacena en el string correspondiente en el array.

    Después de imprimir los strings, el programa libera la memoria para cada string utilizando free(), y luego libera la memoria para el array en sí.

Comments are closed.