Page 97

2 Estructuras de datos en C: vectores est´aticos y registros

CC 2003, 2008 Andr´ es Marzal e Isabel Gracia

21

return 0;

22 23

}

2.2.

Cadenas est´ aticas

Las cadenas son un tipo de datos b´ asico en Python, pero no en C. Las cadenas de C son vectores de caracteres (elementos de tipo char) con una peculiaridad: el texto de la cadena termina siempre en un car´ acter nulo. El car´ acter nulo tiene c´odigo ASCII 0 y podemos representarlo tanto con el entero 0 como con el car´ acter ’\0’ (recuerda que ’\0’ es una forma de escribir el valor entero 0). ¡Ojo! No confundas ’\0’ con ’0’: el primero vale 0 y el segundo vale 48. Las cadenas est´ aticas en C son, a diferencia de las cadenas Python, mutables. Eso significa que puedes modificar el contenido de una cadena durante la ejecuci´on de un programa.

2.2.1.

Declaraci´ on de cadenas

Las cadenas se declaran como vectores de caracteres, as´ı que debes proporcionar el n´ umero m´aximo de caracteres que es capaz de almacenar: su capacidad. Esta cadena, por ejemplo, se declara con capacidad para almacenar 10 caracteres: char a[10];

Puedes inicializar la cadena con un valor en el momento de su declaraci´on: char a[10] = "cadena";

Hemos declarado a como un vector de 10 caracteres y lo hemos inicializado asign´andole la cadena "cadena". F´ıjate: hemos almacenado en a una cadena de menos de 10 caracteres. No hay problema: la longitud de la cadena almacenada en a es menor que la capacidad de a.

2.2.2.

Representaci´ on de las cadenas en memoria

A simple vista, "cadena" ocupa 6 bytes, pues contamos en ella 6 caracteres, pero no es as´ı. En realidad, "cadena" ocupa 7 bytes: los 6 que corresponden a los 6 caracteres que ves m´as uno correspondiente a un car´ acter nulo al final, que se denomina terminador de cadena y es invisible. Al declarar e inicializar una cadena as´ı: char a[10] = "cadena";

la memoria queda de este modo: 0

a

1

2

3

4

5

6

7

8

9

c a d e n a \0

Es decir, es como si hubi´esemos inicializado la cadena de este otro modo equivalente: 1

char a[10] = { ’c’, ’a’, ’d’, ’e’, ’n’, ’a’, ’\0’ };

Recuerda, pues, que hay dos valores relacionados con el tama˜ no de una cadena: su capacidad, que es la talla del vector de caracteres; su longitud, que es el n´ umero de caracteres que contiene, sin contar el terminador de la cadena. La longitud de la cadena debe ser siempre estrictamente menor que la capacidad del vector para no desbordar la memoria reservada. ¿Y por qu´e toda esta complicaci´ on del terminador de cadena? Lo normal al trabajar con una variable de tipo cadena es que su longitud var´ıe conforme evoluciona la ejecuci´on del programa, pero el tama˜ no de un vector es fijo. Por ejemplo, si ahora tenemos en a el texto "cadena" y m´as tarde decidimos guardar en ella el texto "texto", que tiene un car´acter menos, estaremos pasando de esta situaci´ on: Introducci´ on a la Programaci´ on con C

91

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement