J'ai essayé de compiler et exécuter le programme suivant pour inverser une chaîne en utilisant le compilateur gcc pour linux mais il montre l'erreur: erreur de segmentation (core dumped) .I a même essayé de déboguer en utilisant gdb mais ça n'a pas aidé. Le programme donné ci-dessous introduit d'abord t qui est le nombre de cas de test. J'ai testé le programme avec 3 cas de test mais après avoir pris la 2ème entrée de l'utilisateur, le compilateur montre une erreur.erreur de segmentation (core dumped) erreur dans le programme C
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* strrev(char*);
int main(int argc, char *argv[])
{
int t,i=0,temp=0;
char *str[10],*rev[10];
scanf("%d",&t); //input the number of test cases
while(i<t)
{
scanf("%s",str[i]);
i++;
}
while(temp<t) //reverse the string and display it
{
rev[temp]=strrev(str[temp]);
printf("%s \n",rev[temp]);
temp++;
}
return 0;
getchar();
}
Fonction pour inverser la chaîne:
char *strrev(char *str)
{
int i = strlen(str)-1,j=0;
char ch;
while(i>j)
{
ch = str[i];
str[i]= str[j];
str[j] = ch;
i--;
j++;
}
return str;
}
bien, j'ai inséré la ligne pour l'allocation de mémoire, mais cela n'a pas fonctionné. J'ai essayé d'exécuter ce programme sur CLion mais cela montre une autre erreur indiquant que la conversion de 'void *' en 'char *' est invalide. –
Mais quand j'ai typecasted le pointeur à (char) *, cela a fonctionné parfaitement .. –
@haccks SInce la sortie est stockée dans le tableau de rev, il n'y a pas besoin d'allouer de la mémoire pour cela. –