the online lebowski counterpart big c null-character

c - online - the big lebowski netflix



¿Cuál es la diferencia entre(char) 0 y ''/ 0''? Cía (4)

¿Cuál es la diferencia entre usar (char)0 y ''/0'' para denotar el carácter nulo de terminación en una matriz de caracteres?


Ambos son un 0, pero (char) 0 es un char, mientras que ''/0'' es (intencionalmente) un int . Esta diferencia de tipo generalmente no debería afectar su programa si el valor es 0.

Prefiero ''/0'' , ya que esa es la constante prevista para eso.


Arreglo de caracteres significa que está tomando String, así que le aconsejo que use ''/0'' al final del Array de caracteres después de leer todos los Caracteres del usuario porque 0 es un carácter simple, pero ''/0'' es NULL que indica el final de String.


Cero puede significar muchas cosas diferentes en C. Debes usar el carácter nulo ''/ 0'', porque entonces no puede haber confusión sobre que tu intención es la terminación de cadena.

Si establece un char en 0, eso puede significar una terminación nula, pero también puede significar que solo está usando el char como un entero de 8 bits para los cálculos, en lugar de como parte de una cadena. Esto se puede confundir aún más si también está utilizando punteros en el mismo código y los compara con cero, que es un puntero nulo.


La notación de barra diagonal inversa en un literal de carácter le permite especificar el valor numérico de un carácter en lugar de utilizar el propio carácter. Entonces ''/1'' [*] significa "el carácter cuyo valor numérico es 1", ''/2'' significa "el carácter cuyo valor numérico es 2", etc. Casi. Debido a una peculiaridad de C, los literales de caracteres en realidad tienen el tipo int , y de hecho, int se usa para manejar caracteres en otros contextos, como el valor de retorno de fgetc . Entonces ''/1'' significa "el valor numérico como un int, del carácter cuyo valor numérico es 1", y así sucesivamente.

Dado que los caracteres son valores numéricos en C, "el carácter cuyo valor numérico es 1" en realidad es (char)1 , y la decoración adicional en ''/1'' no tiene efecto en el compilador - ''/1'' tiene el mismo tipo y valor como 1 en C. Por lo tanto, la notación de barra invertida es más necesaria en los literales de cadena que en los literales de caracteres, para insertar caracteres no imprimibles que no tienen su propio código de escape.

Personalmente, prefiero escribir 0 cuando me refiero a 0, y dejar que las conversiones implícitas hagan lo suyo. Algunas personas encuentran eso muy difícil de entender. Cuando trabaje con esas personas, es útil escribir ''/0'' cuando se refiere a un carácter con valor 0, es decir, en los casos en que espera que su 0 pronto se convertirá implícitamente al tipo char . De manera similar, puede ayudar escribir NULL cuando quiere decir una constante de puntero nulo, 0.0 cuando quiere decir un doble con valor 0, y así sucesivamente.

Si hace alguna diferencia al compilador, y si necesita una conversión, depende del contexto. Dado que ''/0'' tiene exactamente el mismo tipo y valor que 0 , se debe convertir a char en exactamente las mismas circunstancias. Así que ''/0'' y (char)0 difieren en el tipo, para expresiones exactamente equivalentes que puede considerar (char)''/0'' vs (char)0 , o ''/0'' vs 0 . NULL tiene un tipo definido por la implementación; a veces debe convertirse en un tipo de puntero, ya que puede tener un tipo entero. 0.0 tiene el tipo double , por lo que es ciertamente diferente de 0 . Aún así, float f = 1.0; es idéntico a float f = 1; y float f = 1.0f , mientras que 1.0 / i , donde i es un int, generalmente tiene un valor diferente de 1 / i .

Por lo tanto, cualquier regla general sobre si usar ''/0'' o 0 es únicamente para la comodidad de los lectores de su código, es lo mismo para el compilador. Elija la opción que prefiera (o sus colegas), o quizás defina una macro ASCII_NUL .

[*] o ''/01'' - ya que la barra diagonal inversa introduce un número octal , no decimal, a veces es aconsejable hacer esto un poco más obvio asegurándose de que comience con un 0. No hace ninguna diferencia para 0, 1, 2, por supuesto. Digo "a veces", porque la barra invertida solo puede ir seguida de 3 dígitos octales, por lo que no puede escribir /0101 lugar de /101 , para recordarle al lector que es un valor octal. Todo es bastante incómodo, y lleva a más decoración: /x41 para una A mayúscula, y por lo tanto, podría escribir ''/x0'' para 0 si lo desea.