Je fais mes devoirs, le problème est le suivant:
- accepter les mots séparés par des virgules.
- extrait chaque mot et inversez-les.
- 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.
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.
De nouvelles questions
c
C est un langage de programmation à usage général utilisé pour la programmation système (OS et embarqué), les bibliothèques, les jeux et les plateformes multiples. Cette balise doit être utilisée avec des questions générales concernant le langage C, tel que défini dans la norme ISO 9899 (la dernière version, 9899: 2018, sauf indication contraire - également balise les demandes spécifiques à la version avec c89, c99, c11, etc.). C est distinct de C ++ et il ne doit pas être combiné avec la balise C ++ en l'absence d'une raison rationnelle.