stringtranslate.com

Carácter nulo

El carácter nulo (también terminador nulo ) es un carácter de control con valor cero. [1] [2] [3] [4] Está presente en muchos juegos de caracteres , incluidos los definidos por los códigos Baudot e ITA2 , ISO/IEC 646 (o ASCII ), el código de control C0 , el juego de caracteres codificados universal ( o Unicode ) y EBCDIC . Está disponible en casi todos los lenguajes de programación convencionales . [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 le conoce como byte nulo .

El significado original de este carácter era como NOP : cuando se envía a una impresora o a una terminal , no tiene ningún efecto (algunos terminales, sin embargo, lo muestran incorrectamente como un espacio ). Cuando se utilizaban teleimpresores 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. [ cita necesaria ] En la cinta perforada , el carácter se representa sin ningún agujero, por lo que una nueva cinta no perforada 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 el 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 indicar 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 a menudo se representa como la secuencia de escape \0 en cadenas literales (por ejemplo, "abc\0def") o en constantes de caracteres ( '\0'); este último también se puede escribir 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; en consecuencia, \0no debe ir seguido de 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 idiomas son \000, \x00, \zo \u0000. Se puede colocar un carácter nulo 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 que el usuario ingrese datos sin verificar ) crea una vulnerabilidad conocida como inyección de bytes nulos y puede provocar vulnerabilidades de seguridad. [10]

En notación de intercalación el carácter nulo es ^@. En algunos teclados, se puede ingresar un carácter nulo manteniendo presionado Ctrly presionando (en los diseños de EE. UU., a menudo solo + funcionará, no es necesario obtener el signo @).@Ctrl2⇧ Shift

La notación hexadecimal para nulo es 00. La decodificación de la cadena Base64AA== también produce el carácter nulo.

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

Codificación

En todos los juegos 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 única unidad de código con un valor cero. Por ejemplo, en UTF-8 es un único byte cero. 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 cero, que ahora no se usa para ningún carácter, se use como terminador de cadena.

Referencias

  1. ^ Formato ASCII para intercambio de red. IETF . segundo. 5.2. doi : 10.17487/RFC0020 . RFC 20. NUL (nulo): el carácter de ceros que puede servir para lograr el llenado de tiempo y de medios.
  2. «El conjunto de caracteres de control de la ISO 646» (PDF) . Secretaría ISO/TC 97/SC 2. 1975-12-01. pag. 4.4. Archivado desde el original (PDF) el 12 de mayo de 2014. Posición: 0/0, Nombre: Nulo, 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 , existirá en el conjunto de caracteres de ejecución básico; se utiliza para terminar una cadena de caracteres literal". — ANSI/ISO 9899:1990 (la norma ANSI C), sección 5.2.1
  6. ^ "Una cadena es una secuencia contigua de caracteres que termina en el primer carácter nulo incluido" - ANSI/ISO 9899:1990 (el estándar ANSI C), sección 7.1.1
  7. ^ 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. 427, N3242=11-0012 , consultado 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ág. 38: "La constante de carácter '\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."} }
  9. ^ En YAML , esta combinación es una secuencia de escape independiente.
  10. ^ Sección de ataque de bytes nulos de clasificación de amenazas WASC de inyección de bytes nulos.

enlaces externos