Pointeur de pointeurs en C
Fermé
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
-
8 févr. 2003 à 14:16
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 9 nov. 2007 à 07:38
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 9 nov. 2007 à 07:38
A voir également:
- Pointeur de pointeurs en C
- Pointeur souris disparu pc portable - Guide
- Pointeur souris - Guide
- Pointeur souris disparu pc portable asus - Guide
- Le pointeur de ma souris ne bouge plus ✓ - Forum souris / Touchpad
- Cercle bleu pointeur souris clignote en permanence windows 10 ✓ - Forum Windows 10
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;
}
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;
}
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
9 févr. 2003 à 17:57
9 févr. 2003 à 17:57
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
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
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 *
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
9 nov. 2007 à 07:38
9 nov. 2007 à 07:38
Salut,
ça veut dire que la fonction prendre en argument un pointeur sur un entier
on pouvait écrire
ça veut dire que la fonction prendre en argument un pointeur sur un entier
on pouvait écrire
int fonction(int *nombre)pour être plus explicite
8 févr. 2003 à 16:20
j'ai juste oublié de préciser qu'il faut libérer la mémoire AVANT la fin du programme
les str[i] d'abord, str ensuite
for(i=0;i<3;i++)
{
free(str[i]);
str[i] = NULL;
}
free(str);
str = NULL;