billgatesanonym a écrit :
char CHAINE[]="Bonjour!";
...
scanf("%s",&chaine);
|
chaine est déclaré nul part. Attention, le C est sensible aux majuscules et aux minuscules, et chaine est donc différent de CHAINE.
Ensuite, si chaine était déclarée par char chaine[] = "Bonjour !"; (en français, on a l'habitude de mettre un espace avant un point d'interrogation et de part et d'autre du signe égal),
alors chaine est un pointeur sur la zone "Bonjour !", et c'est donc déjà une adresse. Il est superflu de mettre l'esperluette (& ) dans le scanf() pour ce cas.
char phrase[]="";
...
phrase="chaine"; |
La première ligne est utilisée par le compilateur, pour créer un pointeur nommé phrase qui pointe en mémoire sur une zone qui contient "", autrement dit qui contient seulement un octet qui est le zéro binaire de fin de chaine.
La deuxième ligne essaye de faire pointer phrase sur une autre zone mémoire contenant le libellé "chaine".
Ce n'est pas logique. Soit on utilise ceci , sans réservé d'espace:
char *phrase;
...
phrase="chaine"; |
Soit (et c'est mieux) on utilise cela, en réservant de l'espace :
char phrase[20];
...
strcpy(phrase, "chaine" ); |
De toutes manières, c'est bizarre.
J'ai l'impression qu'il est plutôt demandé de faire ça :
char phrase[20];
scanf("%s, phrase); |
|