2010-09-24 6 views
2

hey les gens me disent gentiment si la déclaration suivante est correcte?problème typedef

si elle est alors expliquer gentiment

typedef char HELLO[5]; 

HELLO name; 

maintenant ce type de données est le nom? [Comme dans un caractère, entier, etc.]

je suis venu à connaître ce nom sera un tableau de chaînes, mais quand je lance le programme suivant j'obtenir l'erreur

#include<stdio.h> 

typedef char HELLO[5]; 

void main() 
{ 
    HELLO name; 
    name="hey"; 
    printf("%s",name); 
} 

erreur: types incompatibles lors de l'attribution à taper 'HELLO' du type 'char *'

Répondre

3

Votre problème n'a rien à voir avec typedef. Votre type est un tableau de caractères également connu sous le nom de chaîne de style c ou de chaîne terminée par un caractère nul pour votre usage.

Vous devez utiliser strcpy ou mieux encore strncpy pour copier une chaîne dans un tableau char. Sinon, vous pouvez utiliser le type char* et vous pouvez enregistrer l'adresse de votre chaîne littérale et ensuite vous pouvez l'imprimer.

i came to know that name will be an array of strings but when i run the following programme

Le terme correct serait un tableau de caractères ou un tampon. Un tableau de chaînes peut être confondu avec un tableau de caractères tableau.

+0

ouais ... mon erreur .. – Kraken

+0

thnx ................... – Kraken

+0

Vous ne voulez pas utiliser 'strncpy', il ne fait pas quoi vous pensez que c'est le cas. – schot

2

name est de type char[5] - un tableau de 5 caractères.

Définir name cette façon

typedef char HELLO[5]; 

HELLO name; 

équivaut à la définition:

char name[5]; 

Vous ne pouvez pas attribuer une chaîne littérale à un tableau de caractères en C, comme dans votre exemple. Vous devez copier les caractères du littéral dans le tableau. Vous pouvez utiliser strncpy() pour cela.

strncpy(name, "hey", 4); // strlen("hey") == 3. 4 passed to strncpy, as the last 
         // argument causes it to add a null character at the end