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 :

Probleme avec strcpy


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    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
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 517
    Points : 50 367
    Points
    50 367
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    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
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 517
    Points : 50 367
    Points
    50 367
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    @ram-000
    je dois faire quoi pour ne plus avoir access violation

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    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

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Ah ouais jcrois comprendre ce NULL.
    Cest a cause ca aussi que desfois jai des fonctions foireuses.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Ca y'est jai reussi *PWNAGE !*





    merci a tous ;D

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    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 EDI
    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