Terminación de cadena – char c=0 vs char c=’\0′

3 minutos de lectura

avatar de usuario
jose df

Al terminar una cadena, me parece que lógicamente char c=0 es equivalente a char c="\0"ya que el byte “nulo” (ASCII 0) es 0pero por lo general la gente tiende a hacer '\0' en lugar de. ¿Es esto puramente por preferencia o debería ser una mejor “práctica”?

¿Cuál es la opción preferida?


EDITAR: K&R dice: “El caracter constante '\0' representa el carácter con valor cero, el carácter nulo. '\0' a menudo se escribe en lugar de 0 para enfatizar la naturaleza del carácter de alguna expresión, pero el valor numérico es solo 0.

  • ¡Hola Joe DF! Leyendo ahora K&R y tenía la misma pregunta. Busqué en Google “\ 0 en c string” y el segundo enlace es a su pregunta. Me ayudó 😉

    – vasili111

    24 de julio de 2016 a las 19:03

  • @ vasili111 Me alegro de que te haya ayudado. 🙂

    – Joe DF

    21 de septiembre de 2016 a las 5:15

avatar de usuario
Nobilis

http://en.wikipedia.org/wiki/Ascii#ASCII_control_code_chart

Binary   Oct  Dec    Hex    Abbr    Unicode  Control char  C Escape code   Name
0000000  000  0      00     NUL     ␀       ^@            \0              Null character

No hay diferencia, pero el más idiomático es '\0'.

Dejándolo como char c = 0; podría significar que tiene la intención de usarlo como un número (por ejemplo, un contador). '\0' es inequívoco.

  • ¿El estándar C garantiza ASCII?

    – Ciro Santilli Путлер Капут 六四事

    27/06/2015 a las 21:21

  • @CiroSantilli六四事件法轮功纳米比亚胡海峰 No, estoy mirando el estándar C99 y hay algunas notas al pie que mencionan ASCII con respecto a la implementación de trígrafos e implementaciones de lenguaje en ASCII y eso es todo. Es algo que está definido por la implementación (tenga en cuenta los conjuntos de caracteres como EBCDIC de IBM). Pero creo que le costará encontrar una implementación C moderna que no dependa del juego de caracteres ASCII. Hay alguna información útil relacionada con esto aquí.

    – Nobilis

    28 de junio de 2015 a las 12:49

  • Sí, eso es lo que mi lectura del C99 también dio. Gracias por esa pregunta, no lo había encontrado antes.

    – Ciro Santilli Путлер Капут 六四事

    28 de junio de 2015 a las 13:28

  • Especialmente, en C/C++, 0 o ‘\0’ también se usa para terminar la cadena literal, por ejemplo: “abc\0″+”def” será “abc”. Este es un lugar donde ‘\0’ es más visual

    – Andiana

    6 de diciembre de 2016 a las 8:45

avatar de usuario
Michal Bukovy

'\0' es solo un caracter ASCII. Lo mismo que 'A'o '0' o '\n'

Si tú escribes char c="\0“, es lo mismo quechar c = 0;

Si tú escribes char c="A"es lo mismo que char c = 65

Es solo una representación de caracteres y es una buena práctica escribirlo, cuando realmente te refieres al byte NULL de la cadena. Ya que char está en C un byte (tipo integral), no tiene ningún significado especial.

  • o 0b1000001, o 0101, eso no es importante en mi respuesta. Es todo número.

    – Michal Bukovy

    6 de junio de 2013 a las 13:16

  • El conjunto de caracteres no tiene que ser compatible con ASCII, por lo que ‘A’ no tiene que ser igual a 65. (Por ejemplo, EBCDIC no es compatible con ASCII). No conozco ningún conjunto de caracteres que use un valor distinto de cero. aunque para el carácter NUL.

    – Paul Groke

    21 de marzo de 2017 a las 11:01


  • @PaulGroke ¡Gracias por el comentario! Me pregunto si hay un conjunto de caracteres que use un valor distinto de cero para el carácter nulo. Para tener en cuenta: 1) como ha mencionado Nobilis: el estándar C no garantiza ASCII; 2) como ha mencionado Keith Thompson (es útil saberlo): la firma del carácter simple está definida por la implementación (fuente: stackoverflow.com/a/62682671/9881330).

    – pmor

    6 de enero de 2021 a las 23:02


La opción preferida es aquella que puede brindar a las personas que leen su código la capacidad de comprender cómo usa su variable, como un número o como un carácter. La mejor práctica es usar 0 cuando quiere decir que su variable es un número y usar ‘\0’ cuando quiere decir que su variable es un carácter.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad