La valeur ASCII de ‘\ 0’ est identique à la valeur ASCII de 0?

J’ai appris que la valeur ASCII de ‘\ 0’ est 0 et que la valeur ASCII de 0 est 0x30, mais lorsque j’essaie d’imprimer leur valeur ASCII à l’aide de printf, j’obtiens le même résultat:

printf("\'\\0\' : %d\n", '\0'); printf("\'\\0\' in hex : %x\n", '\0'); printf("0 : %d\n", 0); printf("0 in hex: %x\n", 0); 

sortie:

 '\0' : 0 '\0' in hex : 0 0 : 0 0 in hex: 0 

Pourquoi?

Le caractère ASCII '0' est différent du nombre 0 . Vous imprimez le nombre entier 0 dans votre deuxième paire de caractères printf au lieu de '0' .

Essaye ça:

 printf("'\\0' : %d\n", '\0'); printf("'\\0' in hex : %x\n", '\0'); printf("'0' : %d\n", '0'); printf("'0' in hex: %x\n", '0'); 

En outre, vous n’avez pas besoin d’échapper à ' intérieur des chaînes. C’est-à-dire que "'" va bien et que vous n’avez pas besoin d’écrire "\'"

Vous confondez 0, ‘\ 0’ et ‘0’.

Les deux premiers sont la même chose; ils représentent simplement un int de valeur 0.

“0”, cependant, est différent et représente un int avec la valeur du caractère “0”, qui est 48 .

Oui, le caractère littéral '\0' a la valeur 0 et est indépendant du jeu de caractères.

(K & R2, 2.3) “La constante de caractère ‘\ 0’ représente le caractère avec la valeur zéro, le caractère nul. ‘\ 0’ est souvent écrit à la place de 0 pour souligner le caractère de certaines expressions, mais la valeur numérique n’est que 0 . ”

La valeur ASCII de ‘\ 0’ est bien 0. Mais ‘\ 0’ est différent de ‘0’ (notez la barre oblique inverse, qui est le symbole d’échappement).

 printf("0 : %d\n", '0'); 

Imprimez comme ça, vous aurez 48.

Votre dernière ligne devrait être

 printf("0 in hex: %x\n", '0'); 

Toutes ces réponses semblent passer à côté du but de \0

Essaye ça:

 printf("This line\0 might not completely appear"); 

C’est la raison de \0

Donc, vous pouvez définir une chaîne terminée par NULL …

 #define TEST_STRING "Test" 

est assez différent de

 #define TEST_STRING "Test\0" 

ces derniers étant utiles dans certains cas.