Cadenas como arreglos de char
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 12 de 63.
En C, no existe un tipo de dato de cadena (string) integrado como el que podrías encontrar en otros lenguajes de programación. En su lugar, las cadenas se representan como arreglos de caracteres. Este concepto fundamental es esencial para comprender cómo se maneja el texto en la programación en C.
Una cadena en C es simplemente una secuencia de caracteres almacenados en ubicaciones de memoria consecutivas. Para crear una cadena, se declara un arreglo de caracteres que sea lo suficientemente grande como para contener todos los caracteres que necesites, más un espacio adicional para un carácter de terminación especial.
char greeting[6]; // Puede contener 5 caracteres + terminador
char message[20]; // Puede contener hasta 19 caracteres + terminadorLa forma más conveniente de trabajar con cadenas es inicializarlas directamente con un literal de cadena al declarar el arreglo. C maneja automáticamente los detalles de almacenar cada carácter en el arreglo:
char greeting[6] = "Hello";
// Esto almacena: 'H', 'e', 'l', 'l', 'o', más un terminador especialTambién puedes dejar que C determine automáticamente el tamaño del array omitiendo la especificación del tamaño al inicializarlo con un literal de cadena:
char greeting[] = "Hello"; // C automáticamente establece este tamaño en 6Comprender que las cadenas son arreglos de caracteres es crucial porque explica cómo C maneja los datos de texto y te prepara para trabajar con funciones de manipulación de cadenas que operan sobre estos arreglos de caracteres.
Desafío
FácilEscribe un programa en C que demuestre la creación y el trabajo con arreglos de caracteres para almacenar cadenas. Tu programa debe:
- Declarar un arreglo de caracteres llamado
greetingcon espacio suficiente para contener la cadena "Hello" (recuerda tener en cuenta el terminador nulo) - Inicializar el arreglo
greetingcon el literal de cadena "Hello" - Declarar un segundo arreglo de caracteres llamado
messagecon 20 elementos - Inicializar el arreglo
messagecon el literal de cadena "Welcome" - Declarar un tercer arreglo de caracteres llamado
wordsin especificar el tamaño, y dejar que C determine automáticamente el tamaño inicializándolo con "Programming" - Imprimir las tres cadenas usando
printfcon el especificador de formato%s - Imprimir el tamaño de cada arreglo usando
sizeofpara demostrar cuánta memoria ocupa cada arreglo de caracteres
Tu salida debe mostrar los resultados en el siguiente formato:
greeting: Hello
message: Welcome
word: Programming
Size of greeting: 6
Size of message: 20
Size of word: 12Este desafío pone a prueba tu comprensión sobre cómo declarar arreglos de caracteres para almacenar cadenas, cómo los literales de cadena se terminan automáticamente con un carácter nulo cuando se asignan a arreglos de caracteres, y cómo C calcula automáticamente los tamaños de los arreglos cuando omites la especificación del tamaño durante la inicialización.
Hoja de referencia
En C, las cadenas se representan como arreglos de caracteres. No existe un tipo de dato de cadena integrado.
Declara un arreglo de caracteres con un tamaño especificado:
char greeting[6]; // Puede contener 5 caracteres + terminador
char message[20]; // Puede contener hasta 19 caracteres + terminadorInicializa con un literal de cadena:
char greeting[6] = "Hello";
// Esto almacena: 'H', 'e', 'l', 'l', 'o', más un terminador especialDeja que C determine automáticamente el tamaño del arreglo:
char greeting[] = "Hello"; // C automáticamente hace que este tamaño sea 6Imprime cadenas usando el especificador de formato %s:
printf("%s", greeting);Obtén el tamaño del arreglo usando sizeof:
sizeof(greeting) // Devuelve el total de bytes ocupados por el arregloPruébalo tú mismo
#include <stdio.h>
int main() {
// TODO: Escribe tu código aquí
// Declara e inicializa los arreglos de caracteres como se especifica en el desafío
// Imprime las cadenas y sus tamaños
printf("greeting: %s\n", greeting);
printf("message: %s\n", message);
printf("word: %s\n", word);
printf("Size of greeting: %lu\n", sizeof(greeting));
printf("Size of message: %lu\n", sizeof(message));
printf("Size of word: %lu\n", sizeof(word));
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Fundamentos de Punteros
¿Qué es un puntero?Declaración de punterosEl operador de dirección (&)El operador de desreferencia (*)Punteros NULLResumen: Conceptos básicos de punteros4Proyecto: Utilidad de texto simple
Descripción general del proyectoContar caracteres2Punteros y Arrays
Nombres de Arrays como PunterosElementos de un Array - PunterosAritmética de PunterosComparación de PunterosResumen: Recorrido de Arrays con Punteros5Punteros y funciones
Paso por valorPasar punteros a funcionesModificar variables mediante punterosUn ejemplo clásico: Intercambio (Swap)Pasar arrays a funcionesResumen: Argumentos de punteros a funciones3Arreglos de caracteres y cadenas
Cadenas como arreglos de charEl terminador nuloEntrada de cadenas con scanfUso de strlen()Uso de strcpy()Uso de strcat()Uso de strcmp()Resumen: Funciones básicas de cadenas