OVH Cloud OVH Cloud

snprintf ...

4 réponses
Avatar
fanny Chevalier
Bonjour,

Je cherche à utiliser sous Visual Net (c++) la fonction snprintf.
J'inclue l'en-tete <iostream> propre à Windows mais ça ne compile
pas, il ne trouve pas la référence à la fonction...
En incluant <stdio> non plus...

Quelqu'un sait-il comment faire?
Si oui merci de m'indiquer comment.

--
Fanny

4 réponses

Avatar
David Brabant
"fanny Chevalier" wrote

Je cherche à utiliser sous Visual Net (c++) la fonction snprintf.
J'inclue l'en-tete <iostream> propre à Windows mais ça ne compile
pas, il ne trouve pas la référence à la fonction...
En incluant <stdio> non plus...


1. Ce n'est pas du C++;
2. La fonction s'appelle _snprintf (avec un underscore)
et elle est définie dans <stdio.h>
3. Dans ce genre de situation, grep est ton ami.

--
David

Avatar
Anthony Fleury

Bonjour,

Je cherche à utiliser sous Visual Net (c++) la fonction snprintf.
J'inclue l'en-tete <iostream> propre à Windows mais ça ne compile
pas, il ne trouve pas la référence à la fonction...
En incluant <stdio> non plus...


<iostream> n'est pas propre à windows... c'est un en-tête standard défini
dans la norme du C++.
Quant à la fonction snprintf() c'est une fonction héritée de la bibliothèque
standard du C, si tu fais du c++ tu pourrais donc utiliser les IOStreams
plutot.

Pour utiliser snprintf() tu dois inclure <cstdio>. Tous les en tête de la
norme du C en C++ sont de la forme <cX> pour l'en tête <X.h> en C. De plus
les fonctions sont alors placés dans le namespace std. L'utilisation de
snprintf() revient donc à écrire std::snprintf().

--
Anthony

Avatar
kanze
"David Brabant" wrote in
message news:<bls1l8$bsl$...
"fanny Chevalier" wrote

Je cherche à utiliser sous Visual Net (c++) la fonction snprintf.
J'inclue l'en-tete <iostream> propre à Windows mais ça ne compile
pas, il ne trouve pas la référence à la fonction... En incluant
<stdio> non plus...


1. Ce n'est pas du C++;


Mais c'est du C.

2. La fonction s'appelle _snprintf (avec un underscore)
et elle est définie dans <stdio.h>


Pas en C.

3. Dans ce genre de situation, grep est ton ami.


Je dirais plutôt de la documentation. Parce qu'avec grep (en supposant
même qu'il l'a sous Windows), d'abord, il faut aussi savoir où se trouve
les en-têtes en question, et puis, il y a de fortes chances qu'il trouve
snprintf bien dans <stdio.h> -- seulement, avec une compilation
conditionnelle qui fait que le compilateur ne le voit que si on compile
en C.

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


Avatar
kanze
"Anthony Fleury" wrote in message
news:<bls22m$vm$...

Je cherche à utiliser sous Visual Net (c++) la fonction snprintf.
J'inclue l'en-tete <iostream> propre à Windows mais ça ne compile
pas, il ne trouve pas la référence à la fonction... En incluant
<stdio> non plus...


<iostream> n'est pas propre à windows... c'est un en-tête standard
défini dans la norme du C++. Quant à la fonction snprintf() c'est une
fonction héritée de la bibliothèque standard du C, si tu fais du c++
tu pourrais donc utiliser les IOStreams plutot.


C'est plus complexe que ça. C'est une fonction qui n'est devenue partie
de C qu'après la norme C++ a été adoptée. Elle n'est donc pas héritée de
C ; elle n'existe pas en C++.

Dans la pratique, tout dépend du compilateur :

- Il y en a qui s'en fout de C99. La fonction n'y est pas, tout
simplement.

- La fonction y est, comme une extension. C'est une extension
illégale, puisque le programme suivant est du C++ légal :

#include <stdio.h>

int snprintf = 42 ;

Mais c'est une extension bien utile quand même.

- La fonction y est, mais protétée par les gardes de compilation
conditionnelle, de façon que tu ne la vois pas en C++ (au moins
éventuellement de donner des options supplémentaires sur la ligne de
commande pour activer les extensions). C'est à mon avis la meilleur
solution.

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