On Wed, 7 Jan 2004 14:56:47 +0100, "Guillaume Gourdin" wrote:
Honnêtement, je trouve que le plus facile à utiliser dans ces deux cas est sscanf().
Comme quoi, les bonnes vieilles fonctions du C, des fois ...
MB
kanze
Fabien LE LEZ wrote in message news:...
On Wed, 7 Jan 2004 14:56:47 +0100, "Guillaume Gourdin" wrote:
Existe t'il un équivalent c++ pour ces fonctions ?
Honnêtement, je trouve que le plus facile à utiliser dans ces deux cas est sscanf().
Tu trouves que : sscanf( buffer, "%d", &unInt ) ; plus facile à utiliser que : unInt = atoi( buffer ) ; ?
Sans parler des histoires d'erreur de type -- si quelqu'un change unInt en short, tu risques fort avec sscanf, avec atoi, la seule risque dans la pratique, c'est que la valeur serait fausse, s'il y a débordement. (Et on peut espérer que si quelqu'un change unInt en short, c'est qu'ils ont fait assez d'analyse pour être certain que les valeurs y tiennent.)
En fait, il existe des fonctions exactement équivalentes à atoi et atof en C++. Elles se trouvent dans l'en-tête <cstdlib>, et s'appelle std::atoi et std::atof. Mais je me pose la question si on veut vraiment une équivalente aussi exacte si on veut faire du C++ idiomatique.
Réciproquement, peut-on ecrire 'string s = 1.0f;' ?
Non. La syntaxe correcte est dans la FAQ, que tu trouveras ici : <http://www.google.com/search?q=fr.comp.lang.c%2B%2B+faq>
Curieusement, si : std::string s = 1.0f ; n'est pas légal, std::string s ; s = 1.0f ;
l'est. Mais j'ai comme un vague soupçon que la sémantique n'en est pas ce qu'il veut. (Étant donné qu'il n'a pas précisé ce qu'il veut comme sémantique, et qu'il y en a plusieurs de raisonable, c'est difficile à dire. Mais la sémantique que la norme donne à l'affectation n'est pas AMHA parmi les plusieurs raisonables.)
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Fabien LE LEZ <gramster@gramster.com> wrote in message
news:<tc5qvv08jiqhouu5bjobkv2v2l19m86fm3@4ax.com>...
On Wed, 7 Jan 2004 14:56:47 +0100, "Guillaume Gourdin" <toto@toto.com>
wrote:
Existe t'il un équivalent c++ pour ces fonctions ?
Honnêtement, je trouve que le plus facile à utiliser dans ces deux cas
est sscanf().
Tu trouves que :
sscanf( buffer, "%d", &unInt ) ;
plus facile à utiliser que :
unInt = atoi( buffer ) ;
?
Sans parler des histoires d'erreur de type -- si quelqu'un change unInt
en short, tu risques fort avec sscanf, avec atoi, la seule risque dans
la pratique, c'est que la valeur serait fausse, s'il y a débordement.
(Et on peut espérer que si quelqu'un change unInt en short, c'est qu'ils
ont fait assez d'analyse pour être certain que les valeurs y tiennent.)
En fait, il existe des fonctions exactement équivalentes à atoi et atof
en C++. Elles se trouvent dans l'en-tête <cstdlib>, et s'appelle
std::atoi et std::atof. Mais je me pose la question si on veut vraiment
une équivalente aussi exacte si on veut faire du C++ idiomatique.
Réciproquement, peut-on ecrire 'string s = 1.0f;' ?
Non. La syntaxe correcte est dans la FAQ, que tu trouveras ici :
<http://www.google.com/search?q=fr.comp.lang.c%2B%2B+faq>
Curieusement, si :
std::string s = 1.0f ;
n'est pas légal,
std::string s ;
s = 1.0f ;
l'est. Mais j'ai comme un vague soupçon que la sémantique n'en est pas
ce qu'il veut. (Étant donné qu'il n'a pas précisé ce qu'il veut comme
sémantique, et qu'il y en a plusieurs de raisonable, c'est difficile à
dire. Mais la sémantique que la norme donne à l'affectation n'est pas
AMHA parmi les plusieurs raisonables.)
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
On Wed, 7 Jan 2004 14:56:47 +0100, "Guillaume Gourdin" wrote:
Existe t'il un équivalent c++ pour ces fonctions ?
Honnêtement, je trouve que le plus facile à utiliser dans ces deux cas est sscanf().
Tu trouves que : sscanf( buffer, "%d", &unInt ) ; plus facile à utiliser que : unInt = atoi( buffer ) ; ?
Sans parler des histoires d'erreur de type -- si quelqu'un change unInt en short, tu risques fort avec sscanf, avec atoi, la seule risque dans la pratique, c'est que la valeur serait fausse, s'il y a débordement. (Et on peut espérer que si quelqu'un change unInt en short, c'est qu'ils ont fait assez d'analyse pour être certain que les valeurs y tiennent.)
En fait, il existe des fonctions exactement équivalentes à atoi et atof en C++. Elles se trouvent dans l'en-tête <cstdlib>, et s'appelle std::atoi et std::atof. Mais je me pose la question si on veut vraiment une équivalente aussi exacte si on veut faire du C++ idiomatique.
Réciproquement, peut-on ecrire 'string s = 1.0f;' ?
Non. La syntaxe correcte est dans la FAQ, que tu trouveras ici : <http://www.google.com/search?q=fr.comp.lang.c%2B%2B+faq>
Curieusement, si : std::string s = 1.0f ; n'est pas légal, std::string s ; s = 1.0f ;
l'est. Mais j'ai comme un vague soupçon que la sémantique n'en est pas ce qu'il veut. (Étant donné qu'il n'a pas précisé ce qu'il veut comme sémantique, et qu'il y en a plusieurs de raisonable, c'est difficile à dire. Mais la sémantique que la norme donne à l'affectation n'est pas AMHA parmi les plusieurs raisonables.)
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16