operations en ANSI ? [C] - C - Programmation
Marsh Posté le 14-01-2004 à 17:33:13
comportement indéfini. les chaînes littérales sont dans un segment séparé qui peut-être read-only.
donc oui tu peux le faire, mais ça peut tout faire planter.
donc
const char *toto = "bonjour";
*toto++; /* ok */
(*toto)++; /* erreur de compilation */
Marsh Posté le 14-01-2004 à 17:35:25
euh...
merci beaucoup tazzzzz pour ton aide, mais je ne suis pas sur d'avoir tout compris, *toto++ n'est pas machine dépendant ou bien c'est (*toto)++?
et quelqu'un pourrait-il mre dire si ces opérations sont autorisées en C ANSI ?
Marsh Posté le 14-01-2004 à 17:50:44
c'est la modification d'une chaine littérale qui est un comportement indéfini.
Marsh Posté le 14-01-2004 à 18:29:45
ok! merci beaucoupppppp!
autre chose, mon prof m'as dis que char* toto="ezaeaz" et *toto++ sont interdits dans la norme ansi. Seulement quand je compile sous la mandrake 9 ca passe sans problemes avec -ansi -Wall... faut-il rajouter un -Wpointerarithmetics (ou quelque chose comme ca) pour qu'il me signale l'erreur?
merci!
Marsh Posté le 14-01-2004 à 18:33:42
ben non.
*toto++ ne fait que déplacer le pointeur
ce qui n'est pas le cas de (*toto)++
Marsh Posté le 14-01-2004 à 20:26:56
Je suis tout a fait d'accord avec toi, chez moi ca marche, je compile nikel et tout, mais ca devrait etre interdit (d'apres le prof) a cause de la norme ANSI qui n'autorise pas les initialisation de chaines (char * toto="ezaeaz" )
Alors il se plante?
Marsh Posté le 14-01-2004 à 20:29:25
c'est juste le const qu'il faut rajouter pour éviter de faire des bétises, mais il ne me semble pas (là je suis pas sur du tout) qu'en C ANSI une déclaration non-const soit une erreur (compatibilité oblige)
Marsh Posté le 14-01-2004 à 22:01:35
char* toto="ezaeaz" n'est pas interdit dans la norme ansi.
Cf ce que dit taz (et aussi un autre topic qque part ou on a longuement evoqué cela).
Ca devrait etre const char* toto="ezaeaz" mais ca foutrait trop le souk dans le code existant de rejeter les declarations char* toto="ezaeaz" sans const ...
A+,
Marsh Posté le 14-01-2004 à 17:11:42
Salut a tous,
je debute en C, et je voulais savoir si ces operations sont autorisées en C ansi :
une autre question, est-ce que l'opération *toto++ est machine dépendante ou pas?
merci par avance, ca devrait pas prendre plus de 2 secs aux pros du C pour m'aider
bonne journée!
Gian