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 :

"Types incompatibles" : char* et char[5000]


Sujet :

C

  1. #1
    Invité
    Invité(e)
    Par défaut "Types incompatibles" : char* et char[5000]
    Salut. J'ai cette erreur quand je tente de mettre ma variable p dans un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/mamatheking/Programation/DB9command/main.c|40|error: incompatible types when assigning to type ‘char[5000]’ from type ‘char *’
    c'est dans ce code :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    
    int main()
    {
        //déclaration des variables principales
        char command[MAX_TAB];
        char prefix_var;
        char *prefix = &prefix_var;
        int exitvar = 0;
        char arguments [100][5000];
        char *pointeur_arguments = &arguments;
        int cpt = 0;
    
        printf("Welcome in the prompt!\n");
        do
        {
            printf("prompt# ");
            scanf("%s",command);
    
    
            char * pointeur_command = command;
            char pvar[5000];
            char * p = NULL;
            cpt = 0;
            while ((p = strtok (pointeur_command, " ")) != NULL)
            {
                arguments[cpt]=p; // c'est exactement ici que se lève l'erreur
                pointeur_command = NULL;
                cpt ++;
                printf("p= %s",p);
            }
    
    [...]
    
    
        } while (exitvar == 0);
    
        return 0;
    }
    Je ne sais pas trop comment résoudre ça
    Avez vous une idée ?

    Merci d'avance.

    (J'utilise code blocks, GCC 4.5.2, ubuntu 11.4 avec noyau 2.6.38-11-generic-pae)
    Dernière modification par Invité ; 25/09/2011 à 18h20.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mamatheking Voir le message
    Salut. J'ai cette erreur quand je tente de mettre ma variable p dans un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/mamatheking/Programation/DB9command/main.c|40|error: incompatible types when assigning to type ‘char[5000]’ from type ‘char *’
    c'est dans ce code :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
    int main()
    {
        //déclaration des variables principales
        char command[MAX_TAB];
        char prefix_var;
        char *prefix = &prefix_var;
        int exitvar = 0;
        char arguments [100][5000];
        char *pointeur_arguments = &arguments;
        int cpt = 0;
    
        printf("Welcome in the prompt!\n");
        do
        {
            printf("prompt# ");
            scanf("%s",command);
    
    
            char * pointeur_command = command;
            char pvar[5000];
            char * p = NULL;
            cpt = 0;
            while ((p = strtok (pointeur_command, " ")) != NULL)
            {
                arguments[cpt]=p; // c'est exactement ici que se lève l'erreur
                pointeur_command = NULL;
                cpt ++;
                printf("p= %s",p);
            }
    }
    Salut

    Tout à fait normal. arguments[x] référence un tableau de 5000 char. Or en écrivant arguments[x]=... tu tentes de remplacer cet élément (le tableau de 5000 char) par autre chose. Tu aurais eu le même pb si tu avais écrit arguments[x]=123
    Citation Envoyé par mamatheking Voir le message
    Je ne sais pas trop comment résoudre ça
    Avez vous une idée ?
    Remplace char arguments[100][5000] par char* arguments[100]
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Invité
    Invité(e)
    Par défaut
    ok merci ça marche

    Par contre je fait quoi la exactement ? je renvois sur un pointeur ?

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mamatheking Voir le message
    Par contre je fait quoi la exactement ? je renvois sur un pointeur ?
    Tu as déclaré un tableau pouvant stocker 500 pointeurs, chaque pointeur pointant sur un caractère. Et tu stockes dans chaque case de ce tableau le pointeur renvoyé par strtok() à chaque tour de boucle.

    En fait, j'ai un peu l'impression que tu as voulu là découper une chaine sur l'espace et stocker chacun des pointeurs correspondant aux points de la chaine qui marquent le découpage en te disant qu'avec 500 tu en aurais suffisamment.

    Donc imaginons que la chaine soit "bonjour il fait beau" et que le "b" de "bonjour" soit à l'adresse 0x10 ; alors en fin de while tu auras
    arguments[0]=0x10
    arguments[1]=0x18
    arguments[2]=0x1b
    arguments[3]=0x20

    Accessoirement on peut avantageusement remplacer ce while() par un for()
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (cpt=0; (p = strtok (pointeur_command, " ")) != NULL; cpt++)
    {
        arguments[cpt]=p;
        pointeur_command = NULL;
        printf("p= %s",p);
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci !

Discussions similaires

  1. Alias avec différents types de quote ?
    Par Djobird dans le forum Administration système
    Réponses: 2
    Dernier message: 14/02/2011, 17h37
  2. [VB.NET] Type Incompatible
    Par Cyrilange dans le forum Windows Forms
    Réponses: 6
    Dernier message: 08/11/2009, 20h08
  3. [LG]Problême "types incompatibles"
    Par pierrOPSG dans le forum Langage
    Réponses: 7
    Dernier message: 23/04/2004, 21h34

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