Initialisation d'une struct

Bonjour,

je voudrais crée un struct pour mes menus à afficher sur un LCD.

dans mon .h je déclare la structure de tel sorte

struct menuItemLabels {
    char menu[];
    char setTemp[];
    char setBacklight[];
    char temp[];
    char backlight[];
} item;

Puis dans mon .cpp je crée une méthode pour initialiser les valeurs. Méthode appeler via une init comme ceci.

void initStruct() { 
    item.menu = "menu";
    item.setTemp = "Set Temperature" 
    item.setBacklight = "Set Backlight";
    item.temp = "Temperature";
    item.backlight = "Backlight";
}

Sauf que ca ne fonctionne pas :confused: J'ai le message d'erreur suivent pour chacune de mes valeurs de la structure.

Lcd.cpp:16: error: incompatible types in assignment of 'const char [5]' to 'char [0]'
     item.menu = "menu";
               ^

Pourtant lors de la déclaration, je ne définis pas pas menu avec une taille de 0! Je définis simplement que item.menu est de type char?

Salut

Premièrement les variables membres de ta structure n'ont pas de taille. Il faut mettre une valeur entre les crochets.

Sinon :

strcpy(item.menu, "menu");

Autre solution plus sympa, sans code, avec des pointeurs :

struct menuItemLabels {
    const char *menu;
    const char *setTemp;
    const char *setBacklight;
    const char *temp;
    const char *backlight;
};

struct menuItemLabels item = {"menu", "Set Temperature", "Set Backlight", "Temperature", "Backlight"};

@+

Merci pour l'info :slight_smile:

En réalité c'est voulu qu'elles n'aient pas de taille. Je ne trouve pas logique de prédéfinir une taille "beaucoup" trop grande !

Du coup je croyais qu'elles récupérerons la taille nécessaire lors de l'initialisation.

Utilise des pointeurs. Tu en seras pleinement satisfait.

@+

Le C n'est pas un langage magique.
La déclaration de ta structure revient à déclarer une structure de taille forcément nulle.
Copier une chaîne dans une chaîne de taille nulle ne mène nulle part, à part un plantage magistral.

@+

Je me disait vue qu'elles ne sont pas initialiser, elles pourront obtenir leur tailles une fois déclarer et ce en fonction de la phrase. Ainsi j'aurais pas un char qui fait 10 case en plus, pour rien !

Je ne sais plus où j'avais vu ça, mais je déclarais une chaine de caractère. Puis celle-ci s'adapter a la taille de la chaine quand je l'initialiser.

C'est un vaste souvenir d'il y a 4 mois, du coup possible que j'ai loupé une information.

Après les pointeurs c'est vrais que je ne me suis pas encore bien pencher. Du coup, je crois que c'est la bonne occasion de m'y mettre :slight_smile:

Je ne sais plus où j'avais vu ça, mais je déclarais une chaine de caractère. Puis celle-ci s'adapter a la taille de la chaine quand je l'initialiser.

Si tu l'initialise à la déclaration, OUI.

    char s[] = "azertyuiop";

// Cette autre ligne produit une erreur à la compialtion :

    char s[];

//  sketch_jun25a:1: error: storage size of 's' isn't known
//  char s[];

//  Dans une structure cela ne produit pas d'erreur

struct st {
    char s[];
};

//  ce qui a mon sens est absolument anormal.
//  BUG ?

Y a t'il un spécialiste de ce compilateur dans la salle ?

@+