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 :

Copie de char*


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut Copie de char*
    Bonjour, j'ai un petit problème avec de la copie de char*.
    J'ai une struct Objet définie comme ci dessous, que j'utilise dans ma fonction threadProd.
    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
    //struct Objet{
    //    char identificateur[2];
    //    char objet_content[126];
    //};
    //typedef struct Objet Objet;
     
    int threadProd(int num){
        int period=100; /* en millisecondes */
        char type_objet[2];
        char* trame;
        Objet* info; 
        char num2=(char)num;
        type_objet[0]='t';
        type_objet[1]=(char)num;
        type_objet[2]='\0';
     
        info->identificateur=type_objet;
        info->objet_content="25\0";
     
        //blabla
        return 0;
    }
    Quand je compile, j'ai ce message d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    archi6[RSTRE] gcc -std=c99 Producteur.c -o producteur
    Producteur.c: In function ‘threadProd’:
    Producteur.c:39: error: incompatible types when assigning to type ‘char[2]’ from type ‘char *’
    Producteur.c:40: error: incompatible types when assigning to type ‘char[126]’ from type ‘char *’
    Pourtant, je copie un char[2] dans un char[2] pour le premier.
    Pour le second, les données que je vais devoir mettre dans objet_content ont une taille variable, au maximum 126 caractères.

    Pourquoi ces erreurs, et que faire pour remplir les champs de mon Objet ?

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    La copie de deux tableaux ne se fait pas par l'opérateur =. La copie doit se faire élément par élément ou en utilisant une des fonctions appropriées (memcpy, memmov, strcpy,... selon le cas).

    Dans l'expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    info->identificateur=type_objet;
    - info->identificateur est un tableau. On ne peut jamais écrire tableau = quelque chose.
    - type_objet est l'identificateur d'un tableau. Dans ce contexte, il représente non pas le tableau mais l'adresse du premier élément du tableau donc ici un char *
    C'est l'explication du message d'erreur.

    Donc à retenir :
    1- On ne peut jamais écrire tableau = quelque chose.
    2- Sauf si il est opérande des opérateurs unaires sizeof ou & (adresse de) , l'identificateur d'un tableau représente l'adresse de son premier élément.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char type_objet[2];
        type_objet[0]='t';
        type_objet[1]=(char)num;
        type_objet[2]='\0';
    Attention aux accès mémoires .
    un tableau de taille 2 possède 2 "cases" qui sont 0 et 1.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 624
    Par défaut
    C'est dur de se remettre au C

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

Discussions similaires

  1. Copie char *argv[] dans char *tab[]
    Par vegnagun dans le forum Débuter
    Réponses: 12
    Dernier message: 06/03/2012, 18h11
  2. copie d'un tableau de char*
    Par tonio_a_588 dans le forum C++
    Réponses: 8
    Dernier message: 18/05/2009, 14h12
  3. Copy String to array of char
    Par Ardely dans le forum Delphi
    Réponses: 11
    Dernier message: 11/02/2007, 00h24
  4. copie de const char*
    Par oc_alex86 dans le forum C++
    Réponses: 13
    Dernier message: 31/05/2006, 12h01
  5. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20

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