Estoy haciendo mi tarea, el problema es el siguiente:

  1. aceptar palabras separadas por comas.
  2. extrajo cada palabra y revertirla.
  3. 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.

c
1
FunCry 4 nov. 2019 a las 08:46

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.

1
kiran Biradar 4 nov. 2019 a las 05:48