El valor ASCII de ‘\ 0’ es igual al valor ASCII de 0?

Aprendí que el valor ASCII de ‘\ 0’ es 0, y el valor ASCII de 0 es 0x30, pero cuando bash imprimir su valor ASCII usando printf, obtengo el mismo resultado:

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

salida:

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

¿por qué?

El carácter ASCII '0' es diferente al número 0 . Está imprimiendo el número entero 0 en su segundo par de printf s en lugar de '0' .

Prueba esto:

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

Además, no necesitas escapar ' dentro de las cuerdas. Es decir, "'" está bien y no es necesario escribir "\'"

Confunde 0, ‘\ 0’ y ‘0’.

Los dos primeros de estos son la misma cosa; solo representan un int con valor 0.

‘0’, sin embargo, es diferente, y representa un int con el valor del carácter ‘0’, que es 48 .

Sí, el carácter literal '\0' tiene valor 0 y esto es independiente del conjunto de caracteres.

(K & R2, 2.3) “La constante de caracteres ‘\ 0’ representa el carácter con valor cero, el carácter nulo. ‘\ 0’ se escribe a menudo en lugar de 0 para enfatizar la naturaleza de los caracteres de alguna expresión, pero el valor numérico es solo 0 . ”

El valor ASCII para ‘\ 0’ es de hecho 0. Pero ‘\ 0’ es diferente de ‘0’ (observe la barra invertida, que es el símbolo de escape).

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

Imprimir de esta manera, obtendrá 48.

Tu última línea debe ser

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

Todas estas respuestas parecen perder el punto de \0

Prueba esto:

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

Esa es la razon para \0

Así que puedes definir una cadena terminada en NULL …

 #define TEST_STRING "Test" 

es bastante diferente de

 #define TEST_STRING "Test\0" 

siendo esta última útil en ciertos casos.