Utilisation de Strcpy
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

Utilisation de Strcpy



  1. #1
    invite8c1a01a1

    Utilisation de Strcpy


    ------

    Bonjour, j'ai voulu utiliser la fonction strcpy dans mon programme mais l'erreur suivante apparaît toujours:
    error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    Et lorsque je change mon strcpy par le strcpy_s sa ne fonctionne pas plus. qu'est-ce que je dois faire.

    voici un bout de mon programme:
    Code:
    DossierProfesseur::DossierProfesseur(char* FP)
    {
    	char NomFichier[70];
    	int NbrLigne = 0, NbrEtudiant = 0, PasUnCours = 0;
    	string Ligne;
    	bool nomOk = false;
    	const char*nom;
    	const char*prenom;
    	const char*cours;
    
    	sprintf_s(NomFichier, "%c.txt", *FP); // Nom du Fichier
    
    	system("Pause");
    
    	ifstream fichier(NomFichier, std::ifstream::in); // Ouverture du Fichier
    	cout << endl << endl;
    
    	tete = new Professeur();
    	Professeur *ProfTemp = tete;
    	tete->listetudiants = new Etudiants();
    	Etudiants * EtudiantTemp = tete->listetudiants;
    	tete->listecours = new Cours();
    	Cours *CoursTemp = tete->listecours;
    	bool Premier = true;
    	
    	//Boucle de Leccture du Fichier
    
    	while (getline(fichier, Ligne))
    	{
    		//recherche d'un espace ou d'un chiffre dans la ligne
    		if (Ligne.find(' ') == -1 && !any_of(Ligne.begin(), Ligne.end(), ::isdigit) && Ligne.find('&') == -1)
    			//Si on ne trouve pas d'espace ni de chiffre on crée un nouveau professeur
    		{
    			//si ce n'est pas le premier prof
    			if (!Premier)
    			{
    				ProfTemp->suivant = new Professeur();
    				ProfTemp = ProfTemp->suivant;
    				ProfTemp->listecours = new Cours();
    				CoursTemp = ProfTemp->listecours;
    				ProfTemp->listetudiants = new Etudiants();
    				EtudiantTemp = ProfTemp->listetudiants;
    			}
    			//Si c'est le premier prof
    			//On vérifie qu'on a pas déja enregistré le nom du prof
    			if (nomOk == false)
    			{
    				char*temp = new char();
    				strcpy(temp, Ligne.c_str());
    				ProfTemp->nom = temp;
    				nomOk = true;
    			}
    			//Si on a déja enregistré le nom du Prof on passe a l'enregistrement du prénom
    			else
    			{
    				char*temp = new char();
    				(temp, Ligne.c_str());
    				ProfTemp->prenom = temp;
    				nomOk = false;
    				Premier = false;
    			}
    		}
    		//si on trouve un espace, cela veut dire que c'est un nom d'étudiant
    		else if (Ligne.find(' ') != -1)
    		{
    			if (EtudiantTemp->nom != NULL)
    			{
    				EtudiantTemp->suivant = new Etudiants();
    				EtudiantTemp = EtudiantTemp->suivant;
    			}
    			char*temp = new char();
    			strcpy(temp, Ligne.c_str());
    			EtudiantTemp->nom = temp;
    		}
    		//Si on trouve un chiffre dans la ligne, cela veut dire que c'est un cours donc on crée un nouveau cours
    		else if (any_of(Ligne.begin(), Ligne.end(), ::isdigit))
    		{
    			if (CoursTemp->sigle != NULL)
    			{
    				CoursTemp->suivant = new Cours();
    				CoursTemp = CoursTemp->suivant;
    			}
    			char*temp = new char();
    			strcpy(temp, Ligne.c_str());
    			CoursTemp->sigle = temp;
    		}
    		//Si on trouve le signe &
    		else if (Ligne.find('&') != -1)
    		{
    			//cout<< "on change de prof ou d'étudiant"
    		}
    		NbrLigne++;
    	}
    	free(ProfTemp);
    	free(EtudiantTemp);
    	free(CoursTemp);
    	system("Pause");
    	//On ferme le fichier
    	fichier.close(); 
    
    };//Fin du Constructeur
    j'ai regarder sur le net et pourtant ma déclaration semble correcte pourquoi sa fonctionne pas??

    -----

  2. #2
    Jack
    Modérateur

    Re : Utilisation de Strcpy

    Et lorsque je change mon strcpy par le strcpy_s sa ne fonctionne pas plus.
    Je trouve qu'il aurait été intéressant de savoir pourquoi. J'espère que tu as regardé la doc et que tu as bien mis les 3 arguments attendus par la fonction
    Dernière modification par Jack ; 13/02/2015 à 00h33.

  3. #3
    invite8c1a01a1

    Re : Utilisation de Strcpy

    Savoir pourquoi quoi? oui j'ai mis les trois arguments attendus par la fonction.

  4. #4
    Jack
    Modérateur

    Re : Utilisation de Strcpy

    savoir ce qui te fait dire que ça ne fonctionne plus.

  5. A voir en vidéo sur Futura
  6. #5
    invite8c1a01a1

    Re : Utilisation de Strcpy

    Parce que je l'ai essayer j'ai changer le strcpy pour le strcpy_s et ajouter le sizeof demander pis la meme erreur apparait.

  7. #6
    Jack
    Modérateur

    Re : Utilisation de Strcpy

    Quelle erreur ?

  8. #7
    invite8c1a01a1

    Re : Utilisation de Strcpy

    error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

  9. #8
    Jack
    Modérateur

    Re : Utilisation de Strcpy

    C'est impossible. Tu es sûr d'avoir remplacé tous les appels à strcpy?

    Je suppose que tu travailles avec visual studio. Si tu double-cliques sur l'erreur, celle-ci doit être pointée dans l'éditeur. Ca m'étonnerait que ça pointe sur strcpy_s

  10. #9
    invite8c1a01a1

    Re : Utilisation de Strcpy

    quand je change le strcpy pour strcpy_s cest pas la même erreur désoler, y me dise ceci: 2 IntelliSense*: aucune instance de fonction surchargée "strcpy_s" ne correspond à la liste d'arguments (char *, const char *)

  11. #10
    invite8c1a01a1

    Re : Utilisation de Strcpy

    sa fonctionne pas quand j'essaye de mettre strcpy_s ya plein d'erreu qui se souligne et quand je réussit en résoudre un probleme yen na un autre qui apparaît dans la même ligne. comment tu l'écrirais pour utiliser le strcpy_s

  12. #11
    Jack
    Modérateur

    Re : Utilisation de Strcpy

    Code:
    #include <stdio.h>
    #include <string.h>
    #include <string>
    
    
    using namespace std;
    
    
    int main()
    {
    	string st;
    	char st1[100] = "bonjour";
    	char st2[100];
    	strcpy_s(st2, st1);
    	strcpy_s(st2, st.c_str());
    
    
    	return 0;
    }
    Ce code compile sans erreur ni warning sur mon PC avec VS2008 et VS2013

  13. #12
    Jack
    Modérateur

    Re : Utilisation de Strcpy

    Code:
                //Si on a déja enregistré le nom du Prof on passe a l'enregistrement du prénom
                else
                {
                    char*temp = new char();
                    (temp, Ligne.c_str());  // <-- il manque strcpy_s
                    ProfTemp->prenom = temp;
                    nomOk = false;
                    Premier = false;
                }

  14. #13
    Jack
    Modérateur

    Re : Utilisation de Strcpy

    De plus, je ne sais pas s'il existe des subtilité dans ta gestion de liste, mais les 3 free à la fin du constructeur m'interpellent.
    D'une part parce qu'on ne mélange pas les instructions d'allocation dynamique du C avec celles du C++: si tu crées avec new, alors tu supprimes avec delete et pas free
    D'autre part parce que tu va supprimer l'élément de tête de la liste.

    Sur ce, dodo pour ma part

  15. #14
    Jack
    Modérateur

    Re : Utilisation de Strcpy

    Citation Envoyé par Jack Voir le message

    Sur ce, dodo pour ma part
    Apparemment, il y en a qui sont partis en hibernation. Ca fait plaisir d'aider ...

  16. #15
    inviteb9f49292

    Re : Utilisation de Strcpy

    une remarque de fond.
    Si on fait du C++, il vaut mieux utiliser ce qu'il propose pour manipuler les chaînes de caractères. Je crois même qu'il est déconseillé d'utiliser les fonctions C++ sur des "NUL-terminated" srting, et vice-versa.

Discussions similaires

  1. utilisation d'un 555
    Par nicopilo dans le forum Électronique
    Réponses: 52
    Dernier message: 11/03/2013, 14h42
  2. De l'utilisation des CR2
    Par lmdlg dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 15
    Dernier message: 24/02/2013, 08h57
  3. Utilisation proteus et isis, demande d'aide utilisation pour isis.
    Par invite02f8e547 dans le forum Électronique
    Réponses: 0
    Dernier message: 15/06/2012, 10h03
  4. utilisation du cpu a 100%
    Par invite968d315d dans le forum Sécurité et malwares : désinfectez votre machine
    Réponses: 40
    Dernier message: 05/02/2012, 12h39
  5. Utilisation d'une TI-89
    Par invitebbc192f0 dans le forum Mathématiques du collège et du lycée
    Réponses: 2
    Dernier message: 21/09/2008, 17h54