Articulo de referencia

Carácter nulo

El carácter nulo es un carácter de control con valor cero . [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] Muchos conjuntos de caracteres incluyen un punto de código para un carácter nulo , incl...

El carácter nulo es un carácter de control con valor cero . [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] Muchos conjuntos de caracteres incluyen un punto de código para un carácter nulo , incluidos Unicode ( Conjunto de caracteres codificados universales ), ASCII ( ISO/IEC 646 ), Baudot , códigos ITA2 , el código de control C0 y EBCDIC . En los conjuntos de caracteres modernos, el carácter nulo tiene un valor de punto de código de cero que generalmente se traduce a una sola unidad de código con un valor cero. Por ejemplo, en UTF-8 , es un solo byte cero.

Originalmente, su significado era similar al de NOP : al enviarlo a una impresora o terminal , no tenía efecto (aunque algunas terminales lo mostraban incorrectamente como un espacio ). Cuando se utilizaban teletipos electromecánicos como dispositivos de salida de computadora, se enviaban uno o más caracteres nulos al final de cada línea impresa para dar tiempo al mecanismo a regresar a la primera posición de impresión en la siguiente línea. En la cinta perforada , el carácter se representa sin perforaciones, por lo que una cinta nueva sin perforar se llena inicialmente con caracteres nulos, y a menudo se podía insertar texto en un espacio reservado de caracteres nulos perforando la cinta sobre los nulos.

Una cadena terminada en nulo es una estructura de datos de uso común en el lenguaje de programación C , sus numerosos lenguajes derivados y otros contextos de programación que utiliza un carácter nulo para indicar el final de una cadena . [ 6 ] [ 7 ] Este diseño permite que una cadena tenga cualquier longitud a costa de solo un carácter adicional de memoria. El diseño alternativo común para una cadena almacena la longitud de la cadena como un tipo de dato entero , pero esto limita el tamaño de la cadena al rango del entero (por ejemplo, 255 para un byte).

Para el almacenamiento de bytes , el carácter nulo puede denominarse byte nulo .

Representación

Dado que el carácter nulo no es un carácter imprimible , su representación requiere una notación especial en el código fuente .

En un literal de cadena , el carácter nulo se representa a menudo como la secuencia de escape\0 (por ejemplo, "abc\0def"). Se suele usar una notación similar para un literal de carácter (es decir, '\0') aunque esto suele ser equivalente al literal numérico para cero ( 0). [ 8 ] En muchos lenguajes ( como C , que introdujo esta notación), esta no es una secuencia de escape separada, sino una secuencia de escape octal con un único dígito octal 0; en consecuencia, \0no debe ir seguido de ninguno de los dígitos 0del a 7porque en ese caso se interpretará como el inicio de una secuencia de escape octal más larga. [ 9 ] Otras secuencias de escape que se encuentran en uso en varios lenguajes son \000, \x00, \z, o \u0000.

Se puede insertar un carácter nulo en una URL con el código de porcentaje%00 .

La capacidad de representar un carácter nulo no siempre garantiza que la cadena resultante se interprete correctamente, ya que muchos programas lo consideran el final de la cadena. Por lo tanto, la posibilidad de escribirlo (en caso de entrada de usuario no verificada ) crea una vulnerabilidad conocida como inyección de byte nulo y puede dar lugar a exploits de seguridad. [ 10 ]

En la documentación del software , el carácter nulo se suele representar con el texto NUL (o NULL , aunque esto puede significar el puntero nulo ). En Unicode , existe un carácter para esto: U+2400 SÍMBOLO PARA NULL .

En la notación de intercalación, el carácter nulo es ^@. En algunos teclados, se puede introducir un carácter nulo manteniendo pulsada la tecla Ctrly presionando (en los diseños estadounidenses, a menudo basta con + , ya que no es necesario presionar para obtener el signo @).@Ctrl2⇧ Shift

Referencias

  1. Formato ASCII para intercambio de red . IETF . sec.  5.2. doi : 10.17487/RFC0020 . RFC 20. NUL (Nulo ) : El carácter de ceros que puede servir para completar el relleno de tiempo y el relleno de medios.
  2. "Conjunto de caracteres de control de la norma ISO 646" (PDF) . Secretaría ISO/TC 97/SC 2. 1 de diciembre de 1975. pág. 4.4. Archivado del original (PDF) el 12 de mayo de 2014. Posición: 0/0, Nombre: Nulo, Abreviatura: Nulo 
  3. "Carácter Unicode 'NULO' (U+0000)" . Consultado el 20 de octubre de 2018 .
  4. "Controles C0 y latín básico" (PDF) . Consorcio Unicode. 2018. Consultado el 20 de octubre de 2018 .
  5. "En el conjunto básico de caracteres de ejecución debe existir un byte con todos los bits a 0, denominado carácter nulo ; se utiliza para finalizar una cadena literal de caracteres." — ANSI/ISO 9899:1990 (estándar ANSI C), sección 5.2.1
  6. "Una cadena es una secuencia contigua de caracteres terminada por el primer carácter nulo, que lo incluye" — ANSI/ISO 9899:1990 (el estándar ANSI C), sección 7.1.1
  7. "17.5.2.1.4.1 Cadenas de bytes", Borrador de trabajo, Estándar para el lenguaje de programación C++ (PDF) (borrador de trabajo del estándar ISO 14882), ISO / IEC , 28 de febrero de 2011, pág. 427, N3242=11-0012 , recuperado el 29 de junio de 2026 , Una cadena de bytes terminada en nulo , o NTBS, es una secuencia de caracteres cuyo elemento de mayor direccionamiento con contenido definido tiene el valor cero (el carácter nulo de terminación ); ningún otro elemento en la secuencia tiene el valor cero. 
  8. Kernighan y Ritchie, C. , pág. 38: "La constante de carácter '\0' representa el carácter con valor cero, el carácter nulo. A menudo se escribe '\0' en lugar de 0 para enfatizar la naturaleza de carácter de alguna expresión, pero el valor numérico es simplemente 0."
  9. En YAML, esta combinación es una secuencia de escape separada .
  10. Inyección de byte nulo Clasificación de amenazas WASC Sección de ataque de byte nulo.
  • Inyección de byte nulo Clasificación de amenazas WASC Sección de ataque de byte nulo
  • Introducción al ataque Null Byte
  • Vulnerabilidad de inyección de byte nulo en códigos QR de Apple