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.

Cómo asignar memoria para un arreglo de punteros a un char en c.

He estado trabajando en un programa en C y me quedé atascado con la asignación de memoria para un arreglo de punteros a char. Necesitaré ordenar este arreglo en el futuro. El arreglo debe almacenar caracteres y luego quiero ordenar estos caracteres en orden alfabético.

“`c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct
{
char collection[50];
} data_col;

int main(int argc, char const *argv[])
{
data_col * array[10] = malloc(sizeof(data_col));

<pre><code>for (size_t i = 0; i < 10; i++)
{
scanf("%c", &array[i]->group);
}

return 0;
</code></pre>

}
“`</stdlib.h></string.h></stdio.h>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con la implementación actual:

    1. El array de punteros a char debería ser representado como char ** en lugar de data_col *[].
    2. La asignación para el array de punteros a char debería hacerse utilizando malloc() para cada elemento por separado, en lugar de una única asignación para todo el array utilizando sizeof().
    3. La entrada debería leerse como una cadena utilizando scanf("%s", string) en lugar de un único caracter utilizando scanf("%c", &var).

    Aquí tienes un ejemplo de implementación que soluciona estos problemas:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main(int argc, char const *argv[])
    {
        char **array = malloc(10 * sizeof(char *));
    
        for (size_t i = 0; i < 10; i++)
        {
            char *string = malloc(50 * sizeof(char));
            scanf("%s", string);
            array[i] = string;
        }
    
        // ordenar el array de cadenas en orden alfabético
        // (utilizar un algoritmo de ordenación como quicksort o mergesort)
    
        for (size_t i = 0; i < 10; i++)
        {
            printf("%s\n", array[i]);
            free(array[i]);
        }
    
        free(array);
    
        return 0;
    }
    

    Esta implementación:

    1. Define el array de punteros a char como char ** y asigna memoria para cada elemento por separado utilizando malloc().
    2. Lee la entrada como una cadena utilizando scanf("%s", string).
    3. Ordena el array de cadenas en orden alfabético (no implementado en este ejemplo).
    4. Imprime las cadenas ordenadas y libera la memoria asignada utilizando free().</stdlib.h></string.h></stdio.h>

Comments are closed.