Question sur les tableaux de caractères en c

Résolu/Fermé
sophie34 - 16 nov. 2009 à 11:04
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 16 nov. 2009 à 12:28
Bonjour,

l'enseignant nous a dit qu'un string en c était en fait un tableau de char, dont la taille devait être égale ou supérieur aux nombres de caractères de ce string.

ma question est la suivante:
char nom[5]="merci" n'est pas validé par le compilateur alors qu'il a bien 5 lettres pour ce tableau de 5 cases...

savez-vous pourquoi?

merci
A voir également:

2 réponses

ah ben oui, c'est parce qu'un tableau représentant une chaîne à pour caractères dans la dernière case un '\0', donc voila tout s'explique :)
0
adns Messages postés 1094 Date d'inscription vendredi 23 février 2007 Statut Membre Dernière intervention 27 mars 2012 153
16 nov. 2009 à 11:17
Bonjour

Alors plusieurs choses

lorsque tu fais nom[5] = ...
tu lui demande de faire une affectation dans la case 5 du tableau
ton tableau étant un tableau de char tu dois donc lui affecter un char donc nom[0] = 'm'

ensuite les tableaux commence toujours par l'indice 0 donc si tu fais char[5] ton tableau fera 6 cases...

après si tu veux vraiment avoir ce genre de forme pour créer ton tableau voila ce que tu dois faire (enfin si je me souviens bien de la syntaxe :p)

char[] nom = {'m','e','r','c','i'};
La syntaxe est celle pour du java mais cela dois être a peu près la même en c ;)

Adns
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
16 nov. 2009 à 12:28
Attention:
donc si tu fais char[5] ton tableau fera 6 cases...
Non, en C, si tu déclares char tableau[5], ton tableau fera 5 cases et pour le parcourir tu devras aller de 0 à 4. Si tu veux déclarer une chaîne de 5 caractères (qui par convention sera terminée par un '\0'), il faudra écrire char chaine[6]. La déclaration pouvant se faire par char chaine[6] = {"merci"} ou plus simplement par char chaine[] = {"merci"} ou plus simplement encore par char chaine[] = "merci".
La déclaration char nom[] = {'m','e','r','c','i'} ne déclare pas un tableau contenant une chaîne de caractères mais seulement un tableau contenant 5 caractères; il n'y a pas d'ajout du caractère terminal '\0'.
Bonne continuation.
0