strings leer imprimir elementos caracteres cadenas cadena bidimensionales arreglos arreglo c arrays dynamic char

leer - Inserte el elemento en la matriz de caracteres dinámica en la programación C



imprimir un arreglo en c (2)

¡Aquí está el código, con el contrato que la persona que llama hace la parte gratis! La persona que llama lo llama con insert(&str, input, n)

void insert(char **str, char input, int n) { char* temp = *str; int i; *str = realloc(*str, n + 2); /* realloc first */ if(!*str) /* realloc failed */ { fputs("realloc failed", stderr); free(temp); /* Free the previously malloc-ed memory */ exit(-1); /* Exit the program */ } for (i = n; i >= 0; i--) { (*str)[i + 1] = (*str)[i]; /* Move all characters up */ } (*str)[0] = input; /* Insert the new character */ printf("%s", *str); /* Print the new string */ }

Perdón por el formateo. Eso se deja al lector. No he comprobado el algoritmo pero esto no pierde la memoria

Estaba teniendo algún problema al intentar agregar un elemento a la matriz dinámica de caracteres en la programación C. Aquí está el resultado esperado:

How many characters do you want to input: 5 Input the string:datas The string is: datas Do you want to 1-insert or 2-remove or 3-quit?: 1 What is the character you want to insert: a Resulting string: adata

Ya hice esa parte de entrada de usuario en la función principal y aquí está el código en main donde tomo la entrada de cadena, el tamaño y los paso a insert ():

printf("How many characters do you want to input: "); scanf("%d", &n); str = malloc(n + 1); printf("Input the string class: "); scanf("%s", str); case ''1'': printf("What is the character you want to insert: "); scanf(" %c", &input); insert(str, input, n); break;

Y la parte donde mi inserto ():

void insert(char *str, char input, int n) { int i; size_t space = 1; for (i = 0; i < n; i++) { str[i] = (char)(input + i); space++; str = realloc(str, space); if (i > 2) { break; } } for (i = 0; i < n; i++) { printf("%c", str[i]); } }

Sin embargo, cuando traté de imprimir la cadena desde insert (), digamos que ingresé ''a'' para anexar al primer elemento de la matriz dinámica con un tamaño de 5, el resultado que abcd= es abcd=

Hice referencia al thread de stackoverflow y no estoy seguro de cómo solucionarlo. Gracias por adelantado.


Puedes usar

void insert(char **str, char input, int n) { char* temp = *str; int i; *str = realloc(*str, n + 2); /* realloc first */ if(!(*str)) /* realloc failed */ { fputs("realloc failed", stderr); free(temp); /* Free the previously malloc-ed memory */ exit(-1); /* Exit the program */ } for (i = n; i >= 0; i--) { (*str)[i + 1] = (*str)[i]; /* Move all characters up */ } **str = input; /* Insert the new character */ printf("%s", *str); /* Print the new string */ }

Y pase str por referencia usando

insert(&str, input, n); /* Note the ''&'' */