Discussion: Probleme avec strcpy

  1. #1
    Invité de passage
    Inscrit en
    septembre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : septembre 2008
    Messages : 47
    Points : 4
    Points
    4

    Par défaut Probleme avec strcpy

    J'ai pas d'erreur lors de la compilation, helas !


    variables:
    tmp : char *tmp = (char *)malloc(sizeof(char)*255);
    decimal_table : char decimal_table[7] = {'I','V','X','L','C','D','M'};
    ROMAN_D : #define ROMAN_M 6


    Ligne qui bug (rien n'est executé apres)



    strcpy(tmp,(const char *)decimal_table[ROMAN_D]);


    erreur:
    Access voilation at ....


    j'ai essayé tout plein de truc, impossible de virer c't'erreur

    thanks,

    nico

  2. #2
    Responsable Réseaux

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    mai 2007
    Messages
    11 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2007
    Messages : 11 400
    Points : 49 902
    Points
    49 902

    Par défaut

    Je ne sais pas ce que tu veux faire exactement mais c'est normal que cela parte en carafe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    1/ char *tmp = (char *)malloc(sizeof(char)*255);
     
    2/ char decimal_table[7] = {'I','V','X','L','C','D','M'};
     
    3/ strcpy(tmp,(const char *)decimal_table[ROMAN_D]);
    Ligne 1, tu alloues un buffer de 255 octets, rien à dire mis à part que tu ne fais pas de test de réussite mais passons pour l'instant, ce n'est pas le problème.

    Ligne 2, tu déclares un table de 7 caracteres contenant les valeurs IVXLCDM, rien à dire non plus. Tiens, serais tu entrain de compter en chiffres romains ?

    Ligne 3, tu copies dans ton buffer alloué tmp une chaine de caractères. C'est le rôle de strcpy. La chaine que tu copies est à l'adresse 0x0000004D (c'est le code ascii de 'M' que tu transformes indûment en pointeur sur caractères avec ton cast parce que probablement cela ne compilait pas ). Cette adresse n'est probablement pas dans ton espace mémoire donc "access violation". Le cast n'est pas la solution à tous les problèmes pour supprimer les warnings.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Invité de passage
    Inscrit en
    septembre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : septembre 2008
    Messages : 47
    Points : 4
    Points
    4

    Par défaut

    Ouais. chiffres romains.

    Apres l'exo sur le tri d'un tableau, la conversion chiffres romains -> decimaux, jfais l'inverse, chiffres decimaux -> romains

    La structure de la boucle marche perfect, cest ce strcpy qui mfais buger.

    Je dois faire quoi ?

  4. #4
    Responsable Réseaux

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    mai 2007
    Messages
    11 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2007
    Messages : 11 400
    Points : 49 902
    Points
    49 902

    Par défaut

    Citation Envoyé par secksy Voir le message
    Je dois faire quoi ?
    Je ne sais pas. Qu'est ce que tu dois faire ? Quel algorithme ?

    Parce que là, tu ne donnes pas beaucoup d'informations
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Invité de passage
    Inscrit en
    septembre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : septembre 2008
    Messages : 47
    Points : 4
    Points
    4

    Par défaut

    @ram-000
    je dois faire quoi pour ne plus avoir access violation

  6. #6
    Invité de passage
    Inscrit en
    septembre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : septembre 2008
    Messages : 47
    Points : 4
    Points
    4

    Par défaut

    c'est ca.
    genre si dans les milliers, jai 99, ben jvais repeter 99 fois le M

  7. #7
    gl
    gl est déconnecté
    Rédacteur/Modérateur

    Homme Profil pro
    Inscrit en
    juin 2002
    Messages
    2 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : juin 2002
    Messages : 2 125
    Points : 4 274
    Points
    4 274

    Par défaut

    Citation Envoyé par secksy Voir le message
    J'recupere juste un char dedans, jpense pas avoir besoin du caractere final !
    Si tu veux juste copier un caractère et non une chaîne, il ne faut pas utiliser strcpy() mais tout simplement l'opérateur '=':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmp[i] = decimal_table[ROMAN_D]
    avec i la position où mettre le caractère dans la chaîne de sortie.

  8. #8
    Invité de passage
    Inscrit en
    septembre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : septembre 2008
    Messages : 47
    Points : 4
    Points
    4

    Par défaut

    Ah ouais jcrois comprendre ce NULL.
    Cest a cause ca aussi que desfois jai des fonctions foireuses.

  9. #9
    Invité de passage
    Inscrit en
    septembre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : septembre 2008
    Messages : 47
    Points : 4
    Points
    4

    Par défaut

    Ca y'est jai reussi *PWNAGE !*





    merci a tous ;D

  10. #10
    Expert Confirmé Sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Inscrit en
    décembre 2003
    Messages
    14 509
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 509
    Points : 20 176
    Points
    20 176

    Par défaut

    Citation Envoyé par secksy Voir le message
    J'ai pas d'erreur lors de la compilation, helas !


    variables:
    tmp : char *tmp = (char *)malloc(sizeof(char)*255);
    decimal_table : char decimal_table[7] = {'I','V','X','L','C','D','M'};
    ROMAN_D : #define ROMAN_M 6


    Ligne qui bug (rien n'est executé apres)



    strcpy(tmp,(const char *)decimal_table[ROMAN_D]);


    erreur:
    Access voilation at ....


    j'ai essayé tout plein de truc, impossible de virer c't'erreur

    thanks,

    nico
    Soit tu as juste besoin d'un caractère et tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char tmp[255];
    static char const decimal_table[7] = "IVXLCDM";
    #define ROMAN_M 6
     
    tmp[0] = decimal_table[ROMAN_D];
    tmp[1] = 0;
    Soit tu veux utiliser des chaines et dans ce cas, il faut un tableau de chaines :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char tmp[255];
    static char const * const decimal_table[7] = {"I","V","X","L","C","D","M"};
    #define ROMAN_M 6
     
    strcpy(tmp, decimal_table[ROMAN_D]);
    Pas de Wi-Fi à la maison : CPL

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum Kylix
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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