Pointeurs en C

popop200 -  
 popop200 -
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Membre Dernière intervention   437
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

dans son cas il n'y a pas besoin de malloc ;-)
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437 > lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
c'est vrai que ta solution est plus simple lami20j ;)
0
popop200 > mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention  
 
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
popop200
 
Ah nan, c'est bon j'ai trouvé pourquoi ^^
0