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 ''&'' */