strcpy() erreur dans Visual studio 2012
j'ai donc ce code:
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
...
char* b = new char [10];
strcpy(b, "1234567890");
d'erreur: microsoft visual studio 11.0\vc\include\string.h(110) : voir la déclaration de 'strcpy'
Comment puis-je résoudre ce problème?
Visual Studio 2013?
2012, mon erreur
C'est que le message d'erreur complet? Êtes-vous sûr qu'il n'y en a pas plus, peut-être se plaindre que vous devriez éviter d'utiliser des
erreur C4996: 'strcpy': Cette fonction ou une variable peut être dangereux. Pensez à utiliser strcpy_s à la place. Pour désactiver la dépréciation, l'utilisation _CRT_SECURE_NO_WARNINGS. Consultez l'aide en ligne pour plus de détails.
Le plus drôle, c'est qu'ici, c'est réellement sauver tes fesses parce que vous copiez 11 caractères dans un 10-tableau de caractères. Vraiment, l'utilisation
2012, mon erreur
C'est que le message d'erreur complet? Êtes-vous sûr qu'il n'y en a pas plus, peut-être se plaindre que vous devriez éviter d'utiliser des
strcpy
?erreur C4996: 'strcpy': Cette fonction ou une variable peut être dangereux. Pensez à utiliser strcpy_s à la place. Pour désactiver la dépréciation, l'utilisation _CRT_SECURE_NO_WARNINGS. Consultez l'aide en ligne pour plus de détails.
Le plus drôle, c'est qu'ici, c'est réellement sauver tes fesses parce que vous copiez 11 caractères dans un 10-tableau de caractères. Vraiment, l'utilisation
std::string
à la place.OriginalL'auteur Ivan Prodanov | 2012-08-30
Vous devez vous connecter pour publier un commentaire.
Il y a une explication et une solution pour cela sur MSDN:
et:
http://social.msdn.microsoft.com/Forums/da-DK/vcgeneral/thread/c7489eef-b391-4faa-bf77-b824e9e8f7d2
Je suis entièrement d'accord. Toutefois, lorsque vous êtes le portage de code vous pourriez ne pas vouloir pourchasser tous les strcpy et d'en faire une strcpy_s/strncpy/peu importe si il est bon de savoir que les deux options 🙂
OriginalL'auteur John Humphreys - w00te
Une solution rapide consiste à ajouter le _CRT_SECURE_NO_WARNINGS définition de votre projet, les paramètres de
Cliquez-droit sur votre C++ et a choisi l'élément "Propriétés" pour obtenir la fenêtre propriétés.
Maintenant, suivez et développez de, "Propriétés de Configuration"->"C/C++"->"Préprocesseur"->"définitions de Préprocesseur".
Dans les "définitions de Préprocesseur" ajouter
mais ce serait une bonne idée d'ajouter
à hériter prédéfinis définitions
À mon humble avis & pour la plupart, c'est une bonne approche.
OriginalL'auteur Eat at Joes
Le message que vous obtenez des conseils à partir de MS qu'ils vous recommandons de ne pas utiliser la norme de la fonction strcpy. Leur motivation dans ce est qu'il est facile à l'utilisation abusive de la mauvaise façon (et le compilateur ne peut généralement pas de détecter et de vous avertir de la mauvaise utilisation). Dans votre poste, vous êtes en train de faire exactement cela. Vous pouvez supprimer le message en indiquant au compilateur de ne pas vous donner des conseils. La grave erreur dans votre code restera, cependant.
De la création d'un tampon avec de la place pour 10 caractères. Vous êtes ensuite la farce 11 chars en elle. (Rappelez-vous la résiliation de '\0'?) Vous avez pris une boîte avec juste assez de place pour 10 oeufs et essayé de confiture 11 œufs en elle. Ce n'est que vous obtenez? Ne pas faire cela est de votre responsabilité et le compilateur ne seront généralement pas de détecter de telles choses.
Vous ont marqués cette C++ et string inclus. Je ne connais pas votre motivation pour utiliser la fonction strcpy, mais si vous utiliser std::string à la place de chaînes de style C, vous obtiendrez des boîtes de croître pour répondre à ce que vous avez des trucs à eux.
OriginalL'auteur Avi Berger
J'ai eu à utiliser strcpy_s et cela a fonctionné.
OriginalL'auteur Pat
Si vous obtenez une erreur de dire quelque chose sur obsolètes fonctions, essayez de faire
#define _CRT_SECURE_NO_WARNINGS
ou#define _CRT_SECURE_NO_DEPRECATE
. Ces devrait résoudre le problème. Vous pouvez également utiliser Microsoft est de "sécuriser" les fonctions, si vous le souhaitez.OriginalL'auteur LifeInKernelSpace
Pour mon problème, j'ai enlevé le
#include <glui.h>
déclaration et il a fonctionné sans problème.Inutile de répondre.
glui.h
n'est pas un en-tête vu dans le problème original.OriginalL'auteur waleed_wamo