Langage C, pointeurs, chaîne de caractères
Résolu
nepthuna
-
question -
question -
Bonjour,
je commence en programation C, je fait un petit programme qui doit permettre d'écrire 2 mots et d'afficher les plus long. Je voudrais le faire sans passer par un tableau mais juste des pointeurs.
quand je compile le programme ça m'affiche que tout va bien, mais au moment de l'éxecuter il ne va pas jusqu'au bout. J'ai utilisé le débugger, mais je sais pas trop m'en servir, mais aparament il doit y avoir un problème dans cette boucle:
for ( ; *p != '\0' ; p++, i++)
je ne sais pas si c'est possible de mettre un pointeur en condition?
sinon la fonction entière qui pose problème c'est celle la:
char *compte(char *tab1, char *tab2)
{
int i=0, j=0;
char *p;
p = tab1;
for ( ; *p != '\0' ; p++, i++)
p=tab2;
for ( ; *p != '\0' ; p++,j++)
if (i > j)
return tab1;
if (j > i)
return tab2;
}
tab1 et tab2 sont une chaine de caractères contenant chacun un mot, et *p avance dans le mot, et i et j comptent.
il y a peut-être beaucoup plus simple mais j'aimerais comprendre pourquoi ça marche pas.
merci
je commence en programation C, je fait un petit programme qui doit permettre d'écrire 2 mots et d'afficher les plus long. Je voudrais le faire sans passer par un tableau mais juste des pointeurs.
quand je compile le programme ça m'affiche que tout va bien, mais au moment de l'éxecuter il ne va pas jusqu'au bout. J'ai utilisé le débugger, mais je sais pas trop m'en servir, mais aparament il doit y avoir un problème dans cette boucle:
for ( ; *p != '\0' ; p++, i++)
je ne sais pas si c'est possible de mettre un pointeur en condition?
sinon la fonction entière qui pose problème c'est celle la:
char *compte(char *tab1, char *tab2)
{
int i=0, j=0;
char *p;
p = tab1;
for ( ; *p != '\0' ; p++, i++)
p=tab2;
for ( ; *p != '\0' ; p++,j++)
if (i > j)
return tab1;
if (j > i)
return tab2;
}
tab1 et tab2 sont une chaine de caractères contenant chacun un mot, et *p avance dans le mot, et i et j comptent.
il y a peut-être beaucoup plus simple mais j'aimerais comprendre pourquoi ça marche pas.
merci
A voir également:
- Langage C, pointeurs, chaîne de caractères
- Langage ascii - Guide
- Caractères spéciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Plus de chaine tv - Guide
- Chaine radio - Télécharger - Médias et Actualité
2 réponses
en C, une chaîne de caractère est un tableau. Un tableau de caractères, dont le dernier est '\0', le fin de chaîne.
Une chaîne peut être désignée par un pointeur (sur charactère) qui pointe lsur le premier caractère de la chaîne.
Tes boucles for() n'ont pas de corps de fonction, il faut néamoins mettre un ';' après :
for ( ; *p != '\0' ; p++, i++);
sinon il va exécuter l'instruction suivante à chaque boucle au lieu d'une seule fois après être sorti de la boucle !!!
De sorte que ta fonction est correcte au niveau compilation, mais cela ne fait pas ce que tu attends !
Remarque que tu peux écrire de façon plus simple :
for ( ; *p ; p++ , i++ );
ou encore plus simplment toute ta fonction en une seule ligne :
char *compte(char *tab1, char *tab2) { return ( (strlen(tab1) > strlen(tab2) ? tab1 : tab2 ); }
Une chaîne peut être désignée par un pointeur (sur charactère) qui pointe lsur le premier caractère de la chaîne.
Tes boucles for() n'ont pas de corps de fonction, il faut néamoins mettre un ';' après :
for ( ; *p != '\0' ; p++, i++);
sinon il va exécuter l'instruction suivante à chaque boucle au lieu d'une seule fois après être sorti de la boucle !!!
De sorte que ta fonction est correcte au niveau compilation, mais cela ne fait pas ce que tu attends !
Remarque que tu peux écrire de façon plus simple :
for ( ; *p ; p++ , i++ );
ou encore plus simplment toute ta fonction en une seule ligne :
char *compte(char *tab1, char *tab2) { return ( (strlen(tab1) > strlen(tab2) ? tab1 : tab2 ); }
slt tous
j'ai un program en c ,je veux que m'apronne cette prog
struct list *creation()
{
struct neoud *p;
struct list *plist;
plist=malloc(sizeof(*plist));
if (plist=NULL)
{
p=malloc(sizeof(*p));
if (p !=NULL)
{p-> suivant=NULL;
p-> valeur=0;
plist-> start=p;
plist->courant =NULL;
}}
else
{
printf("___________");
return plist;
}}
void insertion (struct list *p, void *val)
{
struct neoud *pi;
pi=malloc(sizeof(*pi));
pi-> valeur =val;
if(pi)
{
if (p->courant)
{
p-> start->suivant=pi;
pi->suivant=NULL;
}}
else
{
pi->suivant =p->courant->suivant;
p-> courant->suivant=pi;
}}
j'ai un program en c ,je veux que m'apronne cette prog
struct list *creation()
{
struct neoud *p;
struct list *plist;
plist=malloc(sizeof(*plist));
if (plist=NULL)
{
p=malloc(sizeof(*p));
if (p !=NULL)
{p-> suivant=NULL;
p-> valeur=0;
plist-> start=p;
plist->courant =NULL;
}}
else
{
printf("___________");
return plist;
}}
void insertion (struct list *p, void *val)
{
struct neoud *pi;
pi=malloc(sizeof(*pi));
pi-> valeur =val;
if(pi)
{
if (p->courant)
{
p-> start->suivant=pi;
pi->suivant=NULL;
}}
else
{
pi->suivant =p->courant->suivant;
p-> courant->suivant=pi;
}}