Structure / Chaines / printf erroné - C - Programmation
Marsh Posté le 16-05-2010 à 19:03:05
J'ai remarqué qu'en laissant un espace libre à la fin de chaque chaine, l'erreur disparait.
Pré-requis ou hasard ?
Code :
|
Code :
|
Marsh Posté le 16-05-2010 à 19:14:28
Un tableau de taille N est indexé de 0 à N-1, donc pour avoir un comportement défini ton '\0' final doit se trouver en N-1, pas en N.
Marsh Posté le 16-05-2010 à 19:41:09
Merci pour la confirmation.
Je pensais qu'une chaine justement allait jusqu'au bout de la déclaration (donc '\0' en fin de tableau).
Marsh Posté le 16-05-2010 à 23:28:32
Nii a écrit : Merci pour la confirmation. |
Hé non. Le '\0' est placé juste après le dernier caractère de la chaine. Et il faut que la zone réceptrice soit assez grande pour stocker les caractères et le '\0'...
Marsh Posté le 17-05-2010 à 11:02:35
Je me suis mal exprimé.
Pour moi char var[4] voulait dire :
var[0] = 'a';
var[1] = 'b';
var[2] = 'c';
var[3] = 'd';
var[4] = '\0';
Et pas :
var[0] = 'a';
var[1] = 'b';
var[2] = 'c';
var[3] = '\0';
var[4] = '';
Marsh Posté le 17-05-2010 à 11:09:31
char var[4] c'est un tableau de 4 char, tout comme int var[4] est un tableau de 4 int ou struct foo var[4] est un tableau de 4 struct foo. Il n'y a pas une exception pour char parce qu'on utilise souvent (mais pas exclusivement) les tableaux de char pour stocker des chaines terminees par un NUL.
Marsh Posté le 17-05-2010 à 11:17:34
Citation : Pour moi char var[4] voulait dire : |
En fait, ce n'est ni la première, ni la seconde solution car pour un tableau t déclaré avec une longueur n, son dernier élement est t[n-1] et non pas t[n]. Donc dire que var[4] = ''; n'a aucun sens.
Marsh Posté le 17-05-2010 à 16:48:00
Citation : car pour un tableau t déclaré avec une longueur n, son dernier élément est t[n-1] et non pas t[n]. |
Tu résume ce sur quoi je doutais, et tu met le doigt sur mon erreur.
Merci les gens.
Marsh Posté le 16-05-2010 à 17:20:25
Bonjour.
Je recherche une explication au comportement d'un code.
L'affichage de mes variables est :
Je ne comprends pas pourquoi lors du dernier printf, mes données sont erronées et se "superposent".
Si quelqu'un pouvait me dire l'erreur que je fais. Merci.