Je fais mes devoirs, le problème est le suivant:

  1. accepter les mots séparés par des virgules.
  2. extrait chaque mot et inversez-les.
  3. les remettre en ordre.

par exemple, si j'entre "pomme, œuf", j'obtiens "elppa, gge"

Jusqu'à présent, j'ai terminé la plupart du programme, le programme fonctionne bien lorsque j'entre moins de quatre mots, mais avec plus de quatre mots tels que "ybur, etaga, etiluzal, iluzal sipal, etihcalam" le programme ne fonctionne pas et il me montre la valeur de retour 3221225477. Je viens d'apprendre à utiliser l'allocation dynamique de mémoire, donc je pense que cela peut résulter du fait que je ne l'ai pas utilisé correctement, si c'est vrai, corrigez-moi s'il vous plaît.

#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;
}

J'espère que le programme fonctionne quels que soient les mots que j'entre.

c
1
FunCry 4 nov. 2019 à 08:46

1 réponse

b=(char**)malloc(sizeof(char)*c); 

devrait être

b = malloc(sizeof(char *) * c); 
                       ^--------------(sizeof pointer)

Pour l'instant, vous allouez uniquement sizeof char * c à char ** comme il se doit sizeof pointer * c.

De plus, vous n'avez pas besoin de lancer le retour malloc.

1
kiran Biradar 4 nov. 2019 à 05:48