8
votes

Microsoft _sprintf Avertissement

Pourquoi obtenir l'avertissement suivant pour le code suivant :)

code: xxx

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.

Je sais que _straprintf est une macro que si _unicode est définie évaluera à _swprintf, ce sera Sprintf.

maintenant Qu'est-ce que c'est ce _swprintf. Il existe une fonction swprintf, mais pourquoi est _sprintf évaluant à _swprintf au lieu de swprintf.

Quelle est la différence B / W les fonctions _xxx et xxx?

EDIT: < / strong>

ok il y a deux définitions pour la version Unicode de _STPRINTF, laquelle est incluse?

Celui de Tchard.h ou strsafe.h? < / p>


2 commentaires

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


5 Réponses :


5
votes

http://msdn.microsoft.com/ EN-US / Bibliothèque / YBK95AXF% 28V.80% 29.aspx

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.

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.


2 commentaires

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. ;)



0
votes

Microsoft fournit sa propre extension de CRT _SWPRINTF - n'est pas compatible (par exemple) avec UNIX


0 commentaires

0
votes

Microsoft (habitué à?) Préfixe autrement disponible des fonctions non win32 non disponibles qui ne faisaient pas partie de la norme C avec le soulignement.


1 commentaires

Ok il y a deux définitions pour la version Unicode de _STPRINTF, laquelle est incluse ???? Celui à Tchar.h ou strsafe.h?



1
votes

Peut-être que cela? XXX


0 commentaires

0
votes

Cela devrait fonctionner

int len = swprintf( buf, 100, L"%s", L"Hello world" );


0 commentaires