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).
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.
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] .
Para trabajar con cadenas terminadas en nulo , el lenguaje de programación C utiliza una serie de funciones :
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 .
lenguaje de programación c | |
---|---|
compiladores |
|
bibliotecas | |
Peculiaridades | |
algunos descendientes | |
C y otros lenguajes |
|
Categoría:Lenguaje de programación C |