Pointeur de pointeurs en C
tafiscobar
Messages postés
1281
Statut
Contributeur
-
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
bonjour, j'espere q quelqu'un pourra m'aider, je n comprend pas pourqoi j'ai toujours Segmentation fault a l'execution,voici le code,il est simple, j'omets ici les includes
int main(int argc, char* argv[]) {
int i=0; char **str;
str=malloc(30*3*sizeof(char));
//initialisations manuelle
for(;i<3;i++)
strcpy(str[i],argv[i]); //ici erreur d'execution.
//essai d'affichage
for(i=0;i<3;i++)
printf("%s",str[i]);
return 1;
}
//j'espere q quelqu'un pourra m'aider,et please pas de vecteurs de pointeurs, mon bleme c'est d'utiliser les pointeurs de pointeurs.
tafiscobar
int main(int argc, char* argv[]) {
int i=0; char **str;
str=malloc(30*3*sizeof(char));
//initialisations manuelle
for(;i<3;i++)
strcpy(str[i],argv[i]); //ici erreur d'execution.
//essai d'affichage
for(i=0;i<3;i++)
printf("%s",str[i]);
return 1;
}
//j'espere q quelqu'un pourra m'aider,et please pas de vecteurs de pointeurs, mon bleme c'est d'utiliser les pointeurs de pointeurs.
tafiscobar
5 réponses
-
voici ton code corrigé
int main(int argc, char* argv[]) {
int i=0;
char **str;
str=(char**)malloc(30*3*sizeof(char*)); // il vaut mieux 'caster' en char**, le type de str, car malloc rend un void*
// et c'était sizeof(char*) puisque str est de tpye char**, pour le sizeof tu recopies le type avec une '*' en moins.
//initialisations manuelle
for(;i<3;i++)
{
// ATTENTION str est bien alloué ci-dessus mais tu oubliai que tu DOIS allouer CHACUN des str[i]
str[i] = (char*)malloc((strlen(argv[i])+1)*sizeof(char);
strcpy(str[i],argv[i]); //normalement l'erreur est corrigée
//essai d'affichage
}
for(i=0;i<3;i++)
printf("%s",str[i]);
return 1;
} -
merci marvinrouge.
au fait, lorsq je faisais ceci: str=malloc(30*3*sizeof(char));,je pensais que c'etait possible de lui demander d'allouer directement un tableau(taille=3) de pointeurs sur char (de taille 30),mais bon cela m'apprendra a essayer de trouver plus simple que le simple.
tafiscobar -
en fait tu peux allouer soit des tableaux de tableaux (char**, ce qui ressemble à un 'peigne' dans el monde réel)c'est le plus clazssqiue et les redimensionnements dynamiques sont pas tout simples MAIS sont rapides à l'éxécution
soit un long tableau contigu (char*) ou tu mettras toutes tes chaines à la suite les unes des autres mais c'est très dangereux à gérer (dépassement de mémoire, oubli du '\0')
de plus c'est dur à redimmensionner dynamiquemeent -
Bonjour,
si vous pouvez m'aidez sur les pointeurs je les saisie pas bien
par exemple si on dit
int fontion(int*)
je cmprends pas cette indice * -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Salut,
ça veut dire que la fonction prendre en argument un pointeur sur un entier
on pouvait écrireint fonction(int *nombre)
pour être plus explicite