Déclaration de tableau de char - C - Programmation
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.
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
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.
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
en tout cas, le deuxième exemple devrait clairement s'écrire :
Code :
|
Marsh Posté le 06-04-2010 à 10:12:20
lassault1 a écrit : 1/ Mais pourquoi une chaine de caractère est pas un tableau ? |
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.
Marsh Posté le 06-04-2010 à 10:47:53
Citation :
|
Oui mais il veut peut-être pas un objet const.
Citation : |
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.
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';