IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

erreur strcpy à l'execution


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Avril 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 9
    Par défaut erreur strcpy à l'execution
    bonjour.

    Voici un bout de ma fonction, je ne comprends pas pourquoi ensuite ca plante a l'execution.
    la compilation s'effectue correctement
    le programme plante à la ligne 15 : "Exception non gérée à 0x6da513af (msvcr100d.dll) dans mon_programme.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x40518000."

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    void(char number_played[])
    {
    char lottery[4];
    char dest[10]; 
    int good;
     
    printf("\n\n ENTER 3 LAST NUMBERS OF LOTTERY\n\n");
    scanf("%s%*c",&lottery);
    strcpy(dest,lottery+1); // j'essaie ici de copier dans dest les 2 derniers chiffres de lottery en donnant dans la source l'addresse
    printf("\n%s",dest); // a l'execution, il affiche bien les 2 derniers chiffres
     
    if (strlen(number_played)==2)
    {
    good=strcmp(number_played,dest);
    if good=0
    {
    ... instructions;
    }
    }
    }
    merci d'avance

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    scanf("%s%*c",lottery);
    lottery est un tableau, il est donc implicitement convertit en un pointeur sur le premier élément, il n'y a donc pas besoin d'utiliser l'opérateur '&'.

    Je te conseille aussi de lire le man de scanf et de fgets.

    En effet, tu ne vérifies pas le code de retour de scanf et tu ne gère pas le cas où la chaine de caractère entrée est trop grande pour être stocké dans lottery.

    De plus dans ce cas là, on utiliserait de préférence fgets ( /!\ gets est à bannir, toujours préférer fgets à la place )

  3. #3
    Membre régulier
    Inscrit en
    Avril 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 9
    Par défaut
    bonsoir, dans un premier temps je pars du principe que l'utilisateur n'entre pas de chaîne trop longue donc pas de soucis à ce niveau, j'ai enlevé le symbole & mais j'ai toujours mon erreur ! un petit coup de pouce supp required

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Pourrais-tu nous donner un code minimal reproduisant ton erreur pour voir ce qu'il se passe?

    Sinon, pourquoi n'utiliserais-tu pas un débogueur pour comprendre ce que fait réellement ta fonction?

  5. #5
    Membre éclairé Avatar de Ngork
    Homme Profil pro
    Barbare IT
    Inscrit en
    Avril 2009
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Barbare IT
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 160
    Par défaut corrigé
    Voici ton code très légèrement corrigé, d'une part selon la correction proposée par Neckara, d'autre part une correction complémentaire sur le test de la valeur de good, qui n'est pas bon, et quelques lignes pour illustrer le fonctionnement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    void test(char number_played[])
    {
      char lottery[4];
      char dest[10];
      int good;
     
      printf("\n\n ENTER 3 LAST NUMBERS OF LOTTERY\n\n");
      scanf("%s%*c",lottery);
      strcpy(dest,lottery+1); // j'essaie ici de copier dans dest les 2 derniers chiffres de lottery en donnant dans la source l'addresse
      printf("\n%s",dest); // a l'execution, il affiche bien les 2 derniers chiffres
     
      if(strlen(number_played)==2)
        {
          good=strcmp(number_played,dest);
          if (good==0)
          {
            printf(" -> Bravo !\n");
          }
      }
    }
     
    int main()
    {
      test("69");
     
      getchar();
     
      return 0;
    }
    Je n'ai rien modifié d'autre et ce code fonctionne (je l'ai testé à l'instant) mais, comme Neckara, je te suggère de revoir les fonctions d'entrée-sortie et de contrôler et encadrer les valeurs de retour comme d'entrée ...

  6. #6
    Membre régulier
    Inscrit en
    Avril 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 9
    Par défaut
    merci pour l'aide, après avoir passer au peigne fin tout le code, l'erreur n'était en fait pas du tout ou je la cherchais...

    elle s'était glisser dans les instructions

    j'avais quelque chose du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     printf("%s%s%s",lottery,lottery); // oubli d'une variable en argument
    merci quand même bonne journée

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/12/2005, 11h26
  2. [PLSQL] Erreur 00922 sur Execute immediate
    Par Henrisbg dans le forum Oracle
    Réponses: 5
    Dernier message: 17/11/2005, 16h06
  3. [Pl/pgSQL] Erreur sur l'execution d'une fonction.
    Par Floréal dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 25/09/2005, 00h48
  4. erreur dans l'execution d'une requete
    Par marsupilami34 dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/09/2005, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo