IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

'snprintf' non défini(e) ;


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de psyphi
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2006
    Messages : 119
    Par défaut 'snprintf' non défini(e) ;
    Alors voila j'ai un code qui fonctionne parfaitement avec code::blocks+MingW mais j'ai voulu le compiler avec visual studio 2005 et j'ai une erreur qui m'embête un peu.
    En effet visual studio ne reconnait pas snprintf() [j'ai bien inclu stdio.h ]. Je me dis bon ba tant pis je vais testé sprintf(), eh mais dans ce cas j'ai un warning qui apparait:
    warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
    Je pense que je dois donc utilisé la fonction sprintf_s dont je n'avais jamais entendue parler avant, est ce que quelqu'un sait si cette fonction est portable et sera reconnu par gcc (MingW) ?

    PS: extrait de man snprintf
    Les fonctions
    snprintf, et vsnprintf sont conformes à ISO/IEC 9899:1999.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    En effet, M$ a refusé C99, préférant leur "secure CRT" 100% non-portable.

    Tu trouvera ici des wrappers des fonctions M$ qui reproduisent la spec de snprintf() :
    http://www.developpez.net/forums/sho...8&postcount=14

    Selon la version de Visual que tu utilises (ici, 2005) tu peux commenter les lignes avec _snprintf() et décommenter celle avec _snprintf_s().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Médinoc
    En effet, M$ a refusé C99, préférant leur "secure CRT" 100% non-portable.
    C'est un poil plus complique que ca, ce n'est pas une invention Microsoft : http://www.open-std.org/jtc1/sc22/wg...docs/n1199.pdf

  4. #4
    Membre éprouvé Avatar de psyphi
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2006
    Messages : 119
    Par défaut
    Pourquoi tu rajoutes des underscores '_' devant les fonctions ?

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Parce que le _snprintf() microsoft en possède un...
    Heureusement d'ailleurs, car il ne correspond pas à la spec: Il n'en a ni les garanties ni la valeur de retour.
    Quant à _scprintf(), c'est une fonction Microsoft qui possède un underscrore, c'est dans la doc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    gl : Ils ne collent quand même pas à ce standard pour autant, ils n'utilisent même pas les noms standard pour les macros (__STDC_WANT_SECURE_LIB__ au lieu de __STDC_WANT_LIB_EXT1__) et les fonctions (_set_invalid_parameter_handler() au lieu de _set_constraint_handler_s())...

    Edit: D'ailleurs, leur vsnprintf_s() et consorts ne correspond pas non plus (carrément pas le même nombre d'argument). Sans compter strtok_s(), qui est une implémentation très tardive de strtok_r() chez MS, et qui a un paramètre ne plus dans le standard...
    Donc, ils restent non-portables...

    Edit2: Tiens, c'est sans doute un changement compris dans le SP1, à présent ils conseillent _CRT_SECURE_NO_WARNINGS au lieu de _CRT_SECURE_NO_DEPRECATE, et le __declspec(deprecated(_Text)) n'indique plus "deprecated" dans le warning...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Médinoc
    gl : Ils ne collent quand même pas à ce standard pour autant, ils n'utilisent même pas les noms standard pour les macros (__STDC_WANT_SECURE_LIB__ au lieu de __STDC_WANT_LIB_EXT1__) et les fonctions (_set_invalid_parameter_handler() au lieu de _set_constraint_handler_s())...
    Vu les dates de publication du document et de Visual Studio, je suis bien en peine de dire si Microsoft a pris des libertes (voire reinventer) ce "standard" ou si le document a evolue entre temps.
    Il n'en reste pas moins que ces fonctions n'est pas une pure invention de Microsoft.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/01/2006, 18h07
  2. Erreur d'analyse XML : entité non définie
    Par ToxiZz dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 16/01/2006, 13h22
  3. id non défini alors qu'il est utilisé
    Par flambo88 dans le forum Langage
    Réponses: 11
    Dernier message: 15/01/2006, 01h36
  4. fonction non définie
    Par ston dans le forum Access
    Réponses: 11
    Dernier message: 12/12/2005, 16h02
  5. [RAR] Fonction rar_open non définie
    Par laulau75 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 11/11/2005, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo