Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Invité de passage
    Inscrit en
    septembre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : septembre 2008
    Messages : 47
    Points : 3
    Points
    3

    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 Raymond Mercier
    Consultant en sécurité
    Inscrit en
    mai 2007
    Messages
    11 180
    Détails du profil
    Informations personnelles :
    Nom : Homme Raymond Mercier
    Âge : 51
    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 180
    Points : 46 517
    Points
    46 517

    Par défaut

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

    Code :
    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 : 3
    Points
    3

    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 Raymond Mercier
    Consultant en sécurité
    Inscrit en
    mai 2007
    Messages
    11 180
    Détails du profil
    Informations personnelles :
    Nom : Homme Raymond Mercier
    Âge : 51
    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 180
    Points : 46 517
    Points
    46 517

    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 : 3
    Points
    3

    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 : 3
    Points
    3

    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 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : juin 2002
    Messages : 2 096
    Points : 3 957
    Points
    3 957

    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 :
    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 : 3
    Points
    3

    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 : 3
    Points
    3

    Par défaut

    Ca y'est jai reussi *PWNAGE !*





    merci a tous ;D

  10. #10
    Rédacteur
    Avatar de Emmanuel Delahaye
    Profil pro
    Inscrit en
    décembre 2003
    Messages
    14 508
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 508
    Points : 18 096
    Points
    18 096

    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 :
    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 :
    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

    Des infos sur la programmation et le langage C:
    http://bien-programmer.blogspot.com/
    http://www.bien-programmer.fr/
    http://bien-programmer.forum-actif.net/forum.htm

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •