stringtranslate.com

Carácter nulo

El carácter nulo (también terminador nulo ) es un carácter de control con el valor cero. [1] [2] [3] [4] Está presente en muchos conjuntos de caracteres , incluidos los definidos por los códigos Baudot e ITA2 , ISO/IEC 646 (o ASCII ), el código de control C0 , el conjunto de caracteres codificados universales (o Unicode ) y EBCDIC . Está disponible en casi todos los lenguajes de programación principales . [5] A menudo se abrevia como NUL (o NULL , aunque en algunos contextos ese término se usa para el puntero nulo ). En códigos de 8 bits, se conoce como byte nulo .

El significado original de este carácter era como NOP : cuando se envía a una impresora o terminal , no tiene efecto (algunos terminales, sin embargo, lo muestran incorrectamente como espacio ). Cuando se usaban teleimpresoras electromecánicas 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. [ cita requerida ] En la cinta perforada , el carácter se representa sin agujeros en absoluto, por lo que una nueva cinta sin perforar se llena inicialmente con caracteres nulos y, a menudo, se puede insertar texto en un espacio reservado de caracteres nulos perforando los nuevos caracteres en la cinta sobre los nulos.

Hoy en día, el carácter tiene mucho más significado en el lenguaje de programación C y sus derivados y en muchos formatos de datos, donde sirve como un carácter reservado utilizado para significar el final de una cadena , [6] a menudo llamada cadena terminada en nulo . [7] Esto permite que la cadena tenga cualquier longitud con solo la sobrecarga de un byte; la alternativa de almacenar un recuento requiere un límite de longitud de cadena de 255 o una sobrecarga de más de un byte (hay otras ventajas/desventajas descritas en el artículo sobre cadenas terminadas en nulo ).

Representación

En el código fuente , el carácter nulo se representa a menudo como la secuencia de escape \0 en literales de cadena (por ejemplo, "abc\0def") o en constantes de caracteres ( '\0'); este último también puede escribirse simplemente como 0(sin comillas ni barra). [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 solo dígito octal 0; como consecuencia, \0no debe ser seguido por ninguno de los dígitos 0hasta 7; de lo contrario, se interpreta como el comienzo 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, \zo \u0000. Un carácter nulo se puede colocar en una URL con el código de porcentaje %00 .

La capacidad de representar un carácter nulo no siempre significa que la cadena resultante se interpretará correctamente, ya que muchos programas considerarán que el carácter nulo es el final de la cadena. Por lo tanto, la capacidad de escribirlo (en caso de entrada no verificada por el usuario ) crea una vulnerabilidad conocida como inyección de bytes nulos y puede dar lugar a ataques de seguridad. [10]

En la notación de intercalación, el carácter nulo es ^@. En algunos teclados, se puede ingresar un carácter nulo manteniendo presionada la tecla Ctrly presionando (en los diseños de EE. UU. , generalmente funciona el signo + , sin necesidad de obtener el signo @).@Ctrl2⇧ Shift

La notación hexadecimal para null es 00. Al decodificar la cadena Base64AA== también se obtiene el carácter null.

En la documentación, el carácter nulo se representa a veces como un símbolo de un solo ancho que contiene las letras "NUL". En Unicode , hay un carácter para esto: U+2400 SÍMBOLO PARA NULO .

Codificación

En todos los conjuntos de caracteres modernos, el carácter nulo tiene un valor de punto de código de cero. En la mayoría de las codificaciones, esto se traduce a una sola unidad de código con un valor cero. Por ejemplo, en UTF-8 es un byte cero único. Sin embargo, en UTF-8 modificado, el carácter nulo se codifica como dos bytes: 0xC0,0x80 . Esto permite que el byte con el valor de cero, que ahora no se utiliza para ningún carácter, se utilice como terminador de cadena.

Referencias

  1. ^ Formato ASCII para intercambio de redes. IETF . sec. 5.2. doi : 10.17487/RFC0020 . RFC 20. NUL (Nulo): El carácter compuesto exclusivamente por ceros que puede servir para completar el llenado de tiempo y de medios.
  2. ^ "El conjunto de caracteres de control de la norma ISO 646" (PDF) . Secretaría ISO/TC 97/SC 2. 1975-12-01. p. 4.4. Archivado desde el original (PDF) el 2014-05-12. Posición: 0/0, Nombre: Null, Abreviatura: Nul
  3. ^ "Carácter Unicode 'NULL' (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. ^ "Un byte con todos los bits establecidos en 0, llamado carácter nulo , debe existir en el conjunto de caracteres de ejecución básica; se utiliza para terminar una cadena literal de caracteres". — ANSI/ISO 9899:1990 (el estándar ANSI C), sección 5.2.1
  6. ^ "Una cadena es una secuencia contigua de caracteres que termina en el primer carácter nulo y lo incluye" — ANSI/ISO 9899:1990 (la norma ANSI C), sección 7.1.1
  7. ^ Borrador de trabajo, Estándar para el lenguaje de programación C++ (PDF) (borrador de trabajo de la norma ISO 14882), ISO / IEC , 28 de febrero de 2011, pág. 427, N3242=11-0012 , recuperado el 27 de febrero de 2013. Una cadena de bytes terminada en nulo , o NTBS, es una secuencia de caracteres cuyo elemento con la dirección más alta y contenido definido tiene el valor cero (el carácter nulo de terminación ); ningún otro elemento de la secuencia tiene el valor cero.
  8. ^ Kernighan y Ritchie, C , p. 38: "La constante de carácter '\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 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. ^ Sección de clasificación de amenazas de WASC sobre inyección de bytes nulos Ataque de bytes nulos.

Enlaces externos