Pointeurs en C

Fermé
popop200 - 23 févr. 2008 à 15:57
 popop200 - 23 févr. 2008 à 18:05
Bonjour,
je possède une fonction dont le prototype en C est le suivant :
int compte_mots(char **ptab_mots)

J'aimerais pouvoir l'utiliser sur un exemple mais ça me renvoie l'erreur suivante quand je compile :

passing argument 1 of «compte_mots" from incompatible pointer type

Pour utiliser ma fonction je fais
char *p;
char *chaine="il fait beau";
*p=&chaine:
compte_mots(p);

Pourriez-vous m'aider à régler ce problème.
Merci d'avance.

3 réponses

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
23 févr. 2008 à 16:20
Salut,

voici un exemple sans pointeur de pointeur, mais le passage directement par adresse en utilisant &
#include<stdio.h>

int compte_char(char **chaine);

int main()
{
  char *chaine = "Salut tout le monde!\n";
  printf("%d\n",compte_char(&chaine));
  return 0;
}

int compte_char(char **chaine){
  int i=0;
  while((*chaine)[i++] != '\0')
          ;
  return i;
}
dans ton cas
il faut écrire
  char **p;
  char *chaine = "Salut tout le monde!\n";
  p = &chaine;
  printf("%d\n",compte_mots(p));
voici un exemple
#include<stdio.h>

int compte_char(char **chaine);

int main()
{
  char **p;
  char *chaine = "Salut tout le monde!\n";
  p = &chaine;
  printf("%d\n",compte_char(p));
  return 0;
}

int compte_char(char **chaine){
  int i=0;
  while((*chaine)[i++] != '\0')
          ;
  return i;
}
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
23 févr. 2008 à 16:21
et ben je vois que ta fonction prend en parametre un char ** et toi tu lui envoi un char *
de plus si tu veut metre "il fait beau" dans *p il te faut utiliser strcpy() sans oublier allouer de la memoire au pointeur avant
char *p; 
char *chaine="il fait beau"; 
p=(char *)malloc(20);
strcpy(p,chaine);
compte_mots(p);


et le prototype

int compte_mots(char *ptab_mots)
0
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
23 févr. 2008 à 16:24
Salut,

dans son cas il n'y a pas besoin de malloc ;-)
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
23 févr. 2008 à 16:32
c'est vrai que ta solution est plus simple lami20j ;)
0
popop200 > mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010
23 févr. 2008 à 17:22
Ok merci, c'est bien comme tu dis lami20j, sauf que maintenant je ne comprend pas, quoi que j'écrive dans ma chaine de caractères, cela me renvoie 13. Bizarre .Pourtant j'ai vérifié ma fonction, je vois pas ce qui cloche, peut être pourrais-tu y trouver quelque chose qui va pas :

int compte_mots(char **ptab_mots){
int cpt=0;
while(ptab_mots[cpt])
cpt++;
return cpt;}

Merci d'avance.
0
Ah nan, c'est bon j'ai trouvé pourquoi ^^
0