char p[]="abc\012\0x34";
printf("%d\n",strlen(p));
Je reçois la sortie 4. Ça ne devrait pas être 3 ? ?? Bien que pour la suite, j'obtienne 3.
char p[]="abc\0";
printf("%d\n",strlen(p));
char p[]="abc\012\0x34";
printf("%d\n",strlen(p));
Je reçois la sortie 4. Ça ne devrait pas être 3 ? ?? Bien que pour la suite, j'obtienne 3.
char p[]="abc\0";
printf("%d\n",strlen(p));
Votre chaîne hace contiennent quatre caractères avant le \0
c'est-à-dire abc
et \012
.
Ce dernier est une séquence d'échappement octale valide, qui correspond à 10 en décimal, c'est-à-dire un caractère de saut de ligne ASCII.
\0x34
d'autre part, n'est pas un octal valide - seul l'élément \0
est valide, donc c'est la fin réelle de votre chaîne terminée par NUL.
\012
est un caractère échappé octal, et non un NUL
suivi par 1
y 2
. x
termine le deuxième caractère octal de sorte qu'il s'agit véritablement d'un caractère NUL
. ( \x34
serait la forme correcte pour un caractère échappé hexadécimal).
La représentation d'un NUL
caractère comme \0
est juste un cas particulier de séquence d'échappement octale. En général, une \
peut être suivi d'un, deux ou trois chiffres octaux pour former une séquence d'échappement octale valide dans un caractère ou un littéral de chaîne.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.