Déclaration de tableau de char

Déclaration de tableau de char - C - Programmation

Marsh Posté le 01-04-2010 à 19:40:20    

bonjour
 
Pourquoi dans cette déclaration de tableau de char (que j'ai trouvé dans 1 livre) il n'y a pas le '\0' a la fin ?
 
 
 
Déclaration du livre :
 
char voy[6] = {'a', 'e', 'i', 'o', 'u', 'y'}
 
Déclaration du tuto :
 
chaine1[7];
chaine1[0] = 't';
chaine1[1] = 'a';
chaine1[2] = 'g';
chaine1[3] = 'a';
chaine1[4] = 'd';
chaine1[5] = 'a';
chaine1[6] = '\0';

Reply

Marsh Posté le 01-04-2010 à 19:40:20   

Reply

Marsh Posté le 01-04-2010 à 19:44:31    

le 0 est implicite. Le standard dit que les éléments non précisés lors d'une initialisation de ce genre sont initialisés à nul par défaut.
 
Edit : d'ailleurs, dans ton tuto, ce n'est pas une initialisation mais une suite d'affectations. Prends plutôt l'habitude d'utiliser des initialisations. C'est une bonne pratique.

Message cité 1 fois
Message édité par theshockwave le 01-04-2010 à 19:46:01

---------------
last.fm
Reply

Marsh Posté le 01-04-2010 à 21:16:14    

Merci,
 
1/ Mais pourquoi une chaine de caractère est pas un tableau ?
 
2/ Dans quel cas on utilise un tableau et dans quel cas on utilise une chaine avec des exemples si possible

Reply

Marsh Posté le 01-04-2010 à 22:28:49    

theshockwave a écrit :

le 0 est implicite. Le standard dit que les éléments non précisés lors d'une initialisation de ce genre sont initialisés à nul par défaut.


Non, c'est parce que c'est un tableau contenant 6 espaces de stockage dans lequel on a mis une lettre par case. Lorsque l'on aura besoin de ce tableau , on utilisera que 1 lettre a la fois.
A ne pas confondre avec une chaine de caractères AZT "à zéro terminal" ou c'est la globalité que l'on peut vouloir souhaiter traiter comme le mot "tagada" du deuxième exemple.

Reply

Marsh Posté le 02-04-2010 à 11:14:06    

breizhbugs a écrit :

Non, c'est parce que c'est un tableau contenant 6 espaces de stockage dans lequel on a mis une lettre par case. Lorsque l'on aura besoin de ce tableau , on utilisera que 1 lettre a la fois.


 
Et voilà que je ne sais plus compter, j'avais vu 5 caractères  :sweat:  
en tout cas, le deuxième exemple devrait clairement s'écrire :
 

Code :
  1. const char chaine[] = "tagada";


---------------
last.fm
Reply

Marsh Posté le 06-04-2010 à 10:12:20    

lassault1 a écrit :

1/ Mais pourquoi une chaine de caractère est pas un tableau ?
 
2/ Dans quel cas on utilise un tableau et dans quel cas on utilise une chaine avec des exemples si possible

Une chaîne de caractère est, d'une façon ou d'une autre, un tableau de caractères.
 
Sauf que, en raison de leur nature particulière, on spécifie des règles à suivre, comme par exemple de les terminer par un zéro, noté "\0", de façon à ce que cette chaîne respecte une certaine norme, qui permet ensuite d'utiliser des fonctions spécifiques comme "strlen" qui se basent sur cette norme.
 
Mais tout dépend de ce que tu veux stocker. Si c'est du texte, ce sera une chaîne de caractères, qui devra respecter ces normes, mais si c'est des lettres, ce sera un tableau de caractères, qui n'a pas à respecter ces normes. Au final, le conteneur est exactement le même, c'est ce qu'on met dedans et la façon dont on l'utilise qui change.

Reply

Marsh Posté le 06-04-2010 à 10:47:53    

Citation :


Code :
  1. const char chaine[] = "tagada";




 
Oui mais il veut peut-être pas un objet const.
 

Citation :


Sauf que, en raison de leur nature particulière, on spécifie des règles à suivre, comme par exemple de les terminer par un zéro, noté "\0", de façon à ce que cette chaîne respecte une certaine norme, qui permet ensuite d'utiliser des fonctions spécifiques comme "strlen" qui se basent sur cette norme.  


 
Pour détailler un peu plus, un chaîne de caractères est stockée dans un tableau.  
Toutefois, il est généralement difficile de connaître à l'avance la longueur des chaînes de caractères que tu va stocker (utilisation de scanf pour récupérer des mots sur stdin, lecture de fichier...). C'est entre autres pour cela que les chaînes de caractères s'utilisent de la manière suivante :
 
Tu crées un tableau de taille "suffisante" (le max que tu vas mettre dedans).
Comme le mot est plus court que ton tableau tu le termines pas '\0' afin de ne pas lire trop loin dans le tableau de la mémoire non-initialisée.
Toutefois, il est rare de s'embèter à placer soit-même le '\0', les fonctions standards (strlen, strcat, strcmp, strcpy...) ou encore la lecture dans les flux (scanf, fscanf, scanf) le plaçant toutes seules.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed