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 :

Un probleme avec l'insertion de valeur dans les variables d'une structure


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Analyste IP + Programmation
    Inscrit en
    Février 2016
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste IP + Programmation
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2016
    Messages : 59
    Points : 72
    Points
    72
    Par défaut Un probleme avec l'insertion de valeur dans les variables d'une structure
    Bonjour a tous,

    Dans le cadre de mon tp1 en C sous linux, j'ai un petit problème...
    Je ne maîtrise peut être pas encore très bien la notion de gestions de la mémoire avec les pointeurs...etc

    voici ma structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct Dessin {
        struct Rectangle rectangle;
        char image[MAX_LIGNES][MAX_COLONNES];
        char occupe[UN_CHAR];
        char vide[UN_CHAR];
        char intersection[UN_CHAR];
        char chemin[MAX_CHEMIN];
    };
    Une partie de ma fct main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int main(int argc, char *argv[]){
     
        struct Rectangle rectangle;	
        struct Dessin monDessin;
        remplirImage(&monDessin, &rectangle, argv);
        return 0;
    }
    Voici une partie de ma fct en problème qui affichage après chaque concaténation un argument de plus...
    Au lieu de seulement afficher le contenu de occupe

    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
     
    void remplirImage(struct Dessin *dessin, struct Rectangle *rectangle, char *argv[]){
     
        dessin -> occupe[0] = '\0';
        strcat(dessin -> occupe, argv[1]);
        printf("%s\n", dessin -> occupe);
        dessin -> vide[0] = '\0';
        strcat(dessin -> vide, argv[2]);
        printf("%s\n", dessin -> occupe);
        dessin -> intersection[0] = '\0';
        strcat(dessin -> intersection, argv[3]);
        printf("%s\n", dessin -> occupe);
        dessin -> chemin[0] = '\0';
        strcat(dessin -> chemin, argv[4]);
        printf("%s\n", dessin -> occupe);
    Quelqu'un aurait une idee ?????

    Merci d'avance

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Si UN_CHAR == 1, la seule chaîne C que tes tableaux de type char [UN_CHAR] peuvent stocker est la chaîne vide. Tu ne peux rien strcat de plus grand à l'intérieur.

    Quel est l'utilité d'un tableau ne contenant qu'un seul élément ?

  3. #3
    Membre régulier
    Homme Profil pro
    Analyste IP + Programmation
    Inscrit en
    Février 2016
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste IP + Programmation
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2016
    Messages : 59
    Points : 72
    Points
    72
    Par défaut
    Merci d'avoir répondu a mon premier message.

    Pour aider ma cause, je vais donner plus infos...

    a exécution de mon programme sous commande linux :

    ./tp1 X - + EENNSSWW

    le X représente une case remplie
    le - représente une case vide
    le + représente une intersection

    les EENNSSWW représente le chemin et dans quelle direction il s'en va....

    Je veux utiliser les structures car ça me fait penser aux objets en Java et ça fera moins de répétition du code je pense...

    Le but est inséré soit un X ou un - ou un + dans un tableau a deux dimensions.

    Ceci fonctionne assez bien en fonction du résultat que je m'attendais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    dessin -> occupe[0] = '\0';
        strcat(dessin -> occupe, argv[1]);
        printf("%s\n", dessin -> occupe);
        dessin -> vide[0] = '\0';
        strcat(dessin -> vide, argv[2]);
        printf("%s\n", dessin -> vide);
        dessin -> intersection[0] = '\0';
        strcat(dessin -> intersection, argv[3]);
        printf("%s\n", dessin -> intersection);
        dessin -> chemin[0] = '\0';
        strcat(dessin -> chemin, argv[4]);
        printf("%s\n", dessin -> chemin);
    Mais pourquoi ceci fait vraiment une concaténation lol :

    Ca ne devrait pas m'afficher seulement la valeur du X a quatre reprises...?????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    dessin -> occupe[0] = '\0';
        strcat(dessin -> occupe, argv[1]);
        printf("%s\n", dessin -> occupe);
        dessin -> vide[0] = '\0';
        strcat(dessin -> vide, argv[2]);
        printf("%s\n", dessin -> occupe);
        dessin -> intersection[0] = '\0';
        strcat(dessin -> intersection, argv[3]);
        printf("%s\n", dessin -> occupe);
        dessin -> chemin[0] = '\0';
        strcat(dessin -> chemin, argv[4]);
        printf("%s\n", dessin -> occupe);

  4. #4
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Encore une fois je ne sais pas ce que vaut UN_CHAR, mais tu as besoin au minimum de deux octets contigüs pour stocker une chaîne d'un seul caractère (ASCII). Pour comprendre pourquoi je te renvoie à la section du cours sur la représentation des chaînes de caractères en C.

    Autre question : as-tu réellement besoin de stocker toutes tes informations sous cette forme (chaînes) ?

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

Discussions similaires

  1. Probleme avec l'insertion de données dans une table
    Par yasmin ben dans le forum SQL
    Réponses: 1
    Dernier message: 21/11/2015, 13h58
  2. Réponses: 1
    Dernier message: 06/11/2015, 15h50
  3. Réponses: 11
    Dernier message: 02/12/2010, 15h35
  4. Réponses: 21
    Dernier message: 18/11/2008, 14h36
  5. [VB2008E] Où stocker une valeur dans les items d'une combobox ?
    Par dsolheid dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/01/2008, 19h14

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