Estoy haciendo mi tarea, el problema es el siguiente:
- aceptar palabras separadas por comas.
- extrajo cada palabra y revertirla.
- ponerlos de nuevo en orden.
por ejemplo, si entro "manzana,huevo", obtengo "elppa,gge"
Hasta ahora he completado la mayor parte del programa, el programa funciona bien cuando introduzco menos de cuatro palabras, pero con más de cuatro palabras como "ybur,etaga,etiluzal,iluzal sipal,etihcalam" el programa no funciona y me muestra el valor de retorno 3221225477. Acabo de aprender a usar la asignación de memoria dinámica, así que creo que puede resultar del hecho de que no la utilicé correctamente, si eso es cierto, por favor corríjame.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int c=1,i,s;
char a[1000];
fgets(a,1000,stdin);
for(i=0;i<strlen(a);i++){
if(a[i]=='\n'){
a[i]='\0';
}
}
for(i=0;i<strlen(a);i++){
if(a[i]==','){
c++;
}
}
char **b;
b=(char**)malloc(sizeof(char)*c);
for(i=0;i<c;i++){
b[i]=(char*)malloc(sizeof(char)*100);
}
strcpy(b[0],strtok(a,","));
for(i=1;i<c;i++){
strcpy(b[i],strtok(NULL,","));
}
char **d;
d=(char**)malloc(sizeof(char*)*c);
for(i=0;i<c;i++){
d[i]=(char*)malloc(sizeof(char)*strlen(b[i]));
for(s=0;s<strlen(b[i]);s++){
d[i][s]=b[i][strlen(b[i])-s-1];
}
}
printf("%s",d[0]);
for(i=1;i<c;i++){
printf(",%s",d[i]);
}
for(i=0;i<c;i++){
free(b[i]);
free(d[i]);
}
free(b);
free(d);
return 0;
}
Espero que el programa funcione sin importar las palabras que entre.
1 respuesta
b=(char**)malloc(sizeof(char)*c);
debe ser
b = malloc(sizeof(char *) * c);
^--------------(sizeof pointer)
A partir de ahora solo está asignando sizeof char * c
a char **
como debería ser sizeof pointer * c
.
Además, no necesita lanzar el retorno de malloc.
Nuevas preguntas
c
C es un lenguaje de programación de uso general utilizado para la programación del sistema (SO e integrado), bibliotecas, juegos y multiplataforma. Esta etiqueta debe usarse con preguntas generales sobre el lenguaje C, como se define en el estándar ISO 9899 (la última versión, 9899: 2018, a menos que se especifique lo contrario; también etiquete las solicitudes específicas de la versión con c89, c99, c11, etc.). C es distinto de C ++ y no debe combinarse con la etiqueta C ++ en ausencia de una razón racional.