Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3213 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] operations en ANSI ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] operations en ANSI ?

n°611764
Giansolo
ben ... rien....
Posté le 14-01-2004 à 17:11:42  profilanswer
 

Salut a tous,
 
je debute en C, et je voulais savoir si ces operations sont autorisées en C ansi :

Code :
  1. char * toto = "bonjour";
  2. *toto++;


 
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

mood
Publicité
Posté le 14-01-2004 à 17:11:42  profilanswer
 

n°611766
chrisbk
-
Posté le 14-01-2004 à 17:12:10  profilanswer
 

[:lacuna coil]
 
machine dependante = ?

n°611779
Taz
bisounours-codeur
Posté le 14-01-2004 à 17:33:13  profilanswer
 

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 */

n°611781
Giansolo
ben ... rien....
Posté le 14-01-2004 à 17:35:25  profilanswer
 

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 ?

n°611802
Taz
bisounours-codeur
Posté le 14-01-2004 à 17:50:44  profilanswer
 

c'est la modification d'une chaine littérale qui est un comportement indéfini.

n°611830
Giansolo
ben ... rien....
Posté le 14-01-2004 à 18:29:45  profilanswer
 

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!

n°611832
Taz
bisounours-codeur
Posté le 14-01-2004 à 18:33:42  profilanswer
 

ben non.
 
*toto++ ne fait que déplacer le pointeur
ce qui n'est pas le cas de (*toto)++

n°611899
Giansolo
ben ... rien....
Posté le 14-01-2004 à 20:26:56  profilanswer
 

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?

n°611903
Taz
bisounours-codeur
Posté le 14-01-2004 à 20:29:25  profilanswer
 

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)

n°611983
gilou
Modérateur
Modzilla
Posté le 14-01-2004 à 22:01:35  profilanswer
 

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+,


Message édité par gilou le 14-01-2004 à 22:02:38

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le 14-01-2004 à 22:01:35  profilanswer
 

n°611986
Taz
bisounours-codeur
Posté le 14-01-2004 à 22:02:20  profilanswer
 

donc fout du const autant que tu peux

n°612732
Giansolo
ben ... rien....
Posté le 15-01-2004 à 16:51:21  profilanswer
 

oki merci les gars!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] operations en ANSI ?

 

Sujets relatifs
[ANSI C++] Initialisations en tout genre ...[ANSI C++] Templates
Comment faire des operations sur des dates?Où trouver les standard ISO ANSI sur C, C++ ou C#
[Help] Codages ASCII, ANSI et unicode[ANSI - C] Mettre dans un tableau 2 dimensions
[C/C++] Les normes ANSI, c99, et autres?[C ANSI] conversion chaine de caractere <=> float ou double
[Ansi C] caster un int en char* [resolu]Opérations sur des dates
Plus de sujets relatifs à : [C] operations en ANSI ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR