Langage C, pointeurs, chaîne de caractères

Résolu/Fermé
nepthuna - 23 janv. 2008 à 20:25
 question - 3 juin 2008 à 20:26
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
A voir également:

2 réponses

tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 121
23 janv. 2008 à 20:52
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 ); }
2
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;
}}
1