Cadena terminada en nulo

Una cadena terminada en nulo o una cadena C (del nombre del lenguaje C ) o una cadena ASCIIZ es una forma de representar cadenas en los lenguajes de programación, en la que se usa una matriz de caracteres en lugar de introducir un tipo de cadena especial, y el primer carácter nulo especial (NUL del código ASCII , con valor 0).

Descripción

Por ejemplo, en un búfer de cadena (área de memoria asignada para almacenar una cadena) con un tamaño de 11 bytes, una cadena terminada en nulo "CADENA" en la codificación Windows-1251 se puede representar de la siguiente manera:

DE T R O A PERO NULO F % NULO cuatro
0xD1 0xD2 0xD0 0xCE 0xCA 0xC0 0x00 0x46 0x25 0x00 0x34

En este ejemplo, se representa un área de memoria de 11 bytes, aunque en realidad la línea ocupa solo 7. Los caracteres después del carácter nulo (8 - 11 bytes) se denominan basura : son datos que pueden haber quedado en el búfer. de líneas anteriores o de otros usos de la memoria. También pueden incluir caracteres nulos.

Cuando se utilizan codificaciones de un solo byte ( ASCII ), la cantidad de memoria requerida para representar una cadena de N caracteres es N + 1 bytes. Cuando se utiliza Unicode para codificar caracteres , la longitud de la cadena depende de la representación Unicode utilizada (por ejemplo, 2N + 2 bytes para UCS-2 ).

Estas cadenas son estándar en C y en algunos otros lenguajes de programación. Debido a que se utilizan para pasar argumentos de cadena a funciones estándar en muchos sistemas operativos , las operaciones para tratar con cadenas terminadas en nulo han aparecido en Pascal y otros lenguajes.

Para hacer referencia a una cadena terminada en nulo, se utiliza un puntero a su primer carácter. Este es un enfoque simple, rápido y flexible, pero propenso a errores [1] [2] . El programador debe monitorear constantemente su código, a saber:

Además, algunas operaciones de cadenas, como la concatenación , son más lentas para las cadenas terminadas en nulo que para otros tipos de cadenas.

Comparación con alternativas

Una alternativa a las cadenas terminadas en nulo son los métodos adoptados en Pascal y los lenguajes OOP modernos. En Pascal, la cadena comienza en el primer elemento de la matriz y la longitud de la cadena se almacena en el elemento nulo. En este caso, no se requiere un terminador especial para marcar el final de la línea. Por otro lado, aquí la longitud de la cadena está limitada por la capacidad del elemento cero del arreglo, es decir, en el caso de elementos de un solo byte, la longitud de la cadena no puede exceder los 255 caracteres. Las cadenas terminadas en nulo no están sujetas a esta restricción y, en teoría, pueden almacenar cadenas de cualquier longitud. Los lenguajes orientados a objetos almacenan un registro con la longitud de una cadena y una referencia (o puntero) a una matriz de caracteres. Estos métodos no tienen la desventaja de las cadenas terminadas en nulo: pueden almacenar caracteres nulos sin distorsión ni codificación especial.

Varias interfaces utilizan cadenas dobles terminadas en nulo, cuyo signo de terminación es dos terminadores nulos consecutivos [3] .

En lenguaje C

Para trabajar con cadenas terminadas en nulo , el lenguaje de programación C utiliza una serie de funciones :

En lenguaje ensamblador

Algunas variantes del lenguaje ensamblador usan una directiva especial para definir cadenas terminadas en NUL. Así que en GNU Assembler hay una directiva .asciz[4] [5] para esto .

Véase también

Notas

  1. Joel on Software - Back to Basics (enlace no disponible) . Consultado el 17 de septiembre de 2016. Archivado desde el original el 25 de septiembre de 2016. 
  2. El error de un byte más caro: cola ACM . Consultado el 17 de septiembre de 2016. Archivado desde el original el 19 de septiembre de 2016.
  3. ¿Cuál es el formato de una cadena terminada en doble nulo sin cadenas? Archivado el 13 de febrero de 2019 en Wayback Machine / MSDN, 2009
  4. Uso del ensamblador GNU como.: directivas de ensamblaje . Consultado el 17 de septiembre de 2016. Archivado desde el original el 17 de septiembre de 2016.
  5. Copia archivada . Consultado el 17 de septiembre de 2016. Archivado desde el original el 17 de septiembre de 2016.

Literatura

Enlaces