Pourquoi obtenir l'avertissement suivant pour le code suivant :)
code: p> AVERTISSEMENT C4996: '_SWPRINTF': SWPRINTF a été modifié pour être conforme à la norme ISO C, ajoutant un paramètre de comptage de caractères supplémentaire. Pour utiliser Microsoft Swprintf traditionnel, définissez _crt_non_conforming_swprintfs. P>
blockQuote> Je sais que _straprintf est une macro que si _unicode est définie évaluera à _swprintf, ce sera Sprintf. P> maintenant Qu'est-ce que c'est ce _swprintf. Il existe une fonction swprintf, mais pourquoi est _sprintf évaluant à _swprintf au lieu de swprintf. P> Quelle est la différence B / W les fonctions _xxx et xxx? P> EDIT: < / strong> p> ok il y a deux définitions pour la version Unicode de _STPRINTF, laquelle est incluse? p> Celui de Tchard.h ou strsafe.h? P> < / p>
5 Réponses :
http://msdn.microsoft.com/ EN-US / Bibliothèque / YBK95AXF% 28V.80% 29.aspx P>
swprintf est une version large caractère de Sprintf; Les arguments du pointeur sur swprintf sont des chaînes de caractère large. La détection des erreurs de codage dans SWPRINTF peut différer de celle dans Sprintf. SWPRINTF et FWPRINTF se comportent de manière identique à l'exception de ce swprintf écrit une sortie à une chaîne plutôt qu'à une destination de fichier de type, et swprintf nécessite le paramètre de comptage pour spécifier le nombre maximal de caractères à écrire. Les versions de ces fonctions avec le suffixe _L sont identiques, sauf qu'ils utilisent le paramètre local transmis au lieu de la locale de fil actuelle. P>
Dans Visual C ++ 2005, SWPRINTF est conforme à la norme ISO C, qui nécessite le deuxième paramètre, compte, de type taille_t. Pour forcer l'ancien comportement non standard, définissez _crt_non_conforming_swprintfs. Dans une version future, l'ancien comportement peut être supprimé. Le code doit donc être modifié pour utiliser le nouveau comportement correspondant. P> blockQuote>
Pourquoi est-ce que cela donne l'avertissement alors?
L'avertissement n'explique-t-il pas ça? Parce qu'ils ont changé le comportement. Les gens aiment généralement savoir quand le code ne fait pas ce qu'ils attendent. ;)
Microsoft fournit sa propre extension de CRT _SWPRINTF - n'est pas compatible (par exemple) avec UNIX P>
Microsoft (habitué à?) Préfixe autrement disponible des fonctions non win32 non disponibles qui ne faisaient pas partie de la norme C avec le soulignement. P>
Ok il y a deux définitions pour la version Unicode de _STPRINTF, laquelle est incluse ???? Celui à Tchar.h ou strsafe.h?
Peut-être que cela?
Cela devrait fonctionner
int len = swprintf( buf, 100, L"%s", L"Hello world" );
Vous posez des questions sur _stprintf ou _sprintf, ou quoi? Veuillez éditer votre question pour être cohérente.
Je demande à propos de _stprintf, c'était une faute de frappe