4 votes

longueur de la chaîne de caractères contenant \0

 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));

12voto

Alnitak Points 143355

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.

4voto

Charles Bailey Points 244082

\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.

4voto

frp Points 412

Votre corde a une longueur de 4 :

Votre code est équivalent à : char p[]={ 'a', 'b'. 'c'.' \012 ',' \0 ','x','3','4',' \0 '} ;

\012 - caractère avec le code 12 dans le système numérique octal (= 10 en décimal) = ' \n ')

1voto

\012 est un caractère unique. Il s'arrête sur le \0 après cela (et "x34" est de trois caractères supplémentaires, sans compter le terminateur NUL).

0voto

Prince John Wesley Points 22418

\012 est une valeur octale (" \n ").

Prograide.com

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.

Powered by:

X