2012-12-09 2 views

Répondre

3
my_s_t.name = "John"; 

name est un tableau de caractères. Vous ne pouvez donc pas lui affecter directement une chaîne littérale. Vous pouvez utiliser strcpy ou une fonction similaire pour copier le littéral de chaîne OU déclarer name comme char*.

Options:

1)

typedef struct s { 
char name[20]; 
char last_name[20]; 
int height; 
} s_t; 

s_t my_s_t; 
strcpy(my_s_t.name, "John"); 

2)

typedef struct s { 
    char *name; 
    char last_name[20]; 
    int height; 
    } s_t; 

    s_t my_s_t; 
    my_s_t.name = "John"; 
+0

Si oui, pourquoi char s [20] = "bonjour"; fonctionne-t-il? – Lior

+0

@Lior Parce que c'est une initialisation, pas une affectation. Il existe des règles spéciales qui font que les initialisations fonctionnent pour les tableaux. –

+0

@Lior vous ne pouvez le faire lors de l'initialisation de la chaîne. Il va initialiser la chaîne littérale sur la pile. –

1

Vous essayez de attribuer un tableau. Les tableaux ne sont pas assignables. Cela échouera pour la même raison

char a[20]; 
a = "Hello"; /* Error */ 

Pour copier des données dans un tableau, vous devez utiliser une fonction de bibliothèque, comme strcpy

strcpy(a, "Hello"); 

Pendant ce temps, il est possible de copier des données dans un tableau en utilisant les fonctionnalités du langage de base (au lieu de fonctions de la bibliothèque) au point de initialisation, comme dans

char a[20] = "Hello"; 

dans votre cas, vous pouvez utiliser la syntaxe d'initialisation globale pour obtenir le même

s_t my_s_t = { "John", "Smith", 2 }; 

Tant que vous faites cela au point d'initialisation, il fonctionnera. Si vous devez le faire plus tard, alors strcpy est votre ami.

+0

Merci pour votre réponse, j'accepterai @ KingsIndian depuis qu'il a été le premier :) – Lior