Pourquoi le compilateur toujours m'avertir à propos dangereux strtok, même après que je définir _CRT_SECURE_NO_WARNINGS?
Je suis à l'aide de Visual Studio Express 2012 pour le Bureau de Windows.
J'ai toujours l'erreur
Error C4996: 'strtok': This function or variable may be unsafe.
Consider using strtok_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
See online help for details.
Quand j'essaie de compiler les suivantes:
#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char the_string[81], *p;
cout << "Input a string to parse: ";
cin.getline(the_string, 81);
p = strtok(the_string, ",");
while (p != NULL) {
cout << p << endl;
p = strtok(NULL, ",");
}
system("PAUSE");
return 0;
}
Pourquoi j'obtiens cette erreur, même si je définir _CRT_SECURE_NO_WARNINGS
, et comment puis-je résoudre ce problème?
Il n'y a pas de question, et aucun sens du tout. Pourquoi ne pas tout simplement à l'aide de
Votre
La solution est de 1) lire le détail dans l'aide en ligne, et 2) l'utilisation
Parce que
strtok_s
? Quel est le problème ?Votre
#define
devrait en tout cas être avant #include "stdafx.h"
ou bien mettre dans votre projet de propriétés sous C++/définitions de Préprocesseur.La solution est de 1) lire le détail dans l'aide en ligne, et 2) l'utilisation
strtok_s
au lieu de cela, comme l'a suggéré - ou d'utiliser des fonctions C++ au lieu de C. pas désactiver les avertissements.Parce que
strtok_s
est une propriété de la bibliothèque de l'extension et n'est donc pas portable.OriginalL'auteur | 2014-01-10
Vous devez vous connecter pour publier un commentaire.
Votre #define ne fonctionne pas en raison du contenu de votre fichier d'en-tête précompilé (stdafx.h). Le code ressemble à ceci:
Il est le dernier des deux #comprend que l'origine du problème, ceux .h les fichiers eux-mêmes déjà #include string.h. Votre #define est donc trop tard.
Au-delà de la définition de la macro dans la configuration du compilateur au lieu de cela, la solution simple est de simplement déplacer les #define dans votre stdafx.h fichier. Correctif:
OriginalL'auteur Hans Passant
Ce peut-être un vieux post, mais j'ai eu un problème similaire récemment.
Je suis allé dans les options du projet -> C/C++ -> Préprocesseur -> ajout d'un _CRT_SECURE_NO_WARNINGS à la liste des Définitions de Préprocesseur.
De cette façon, vous n'avez pas à mettre dans chaque fichier.
OriginalL'auteur Martin
Essayez de la suivre.
Note le numéro de l'erreur est C4996.
OriginalL'auteur getsuha
On dirait que vous avez basculé sur une option du compilateur qui force le compilateur à considérer tous les avertissements comme des erreurs. Soit désactiver cette option ou, en effet, l'utilisation de la macro _CRT_SECURE_NO_WARNINGS
OriginalL'auteur Vlad from Moscow