El terminador nulo
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 13 de 63.
Has aprendido que las cadenas en C son arreglos de caracteres, pero hay un detalle crucial que hace que funcionen correctamente: cada cadena de C debe terminar con un carácter especial llamado el terminador nulo, escrito como \0.
El terminador nulo es un carácter con el valor ASCII de cero que marca el final de una cadena. Sin él, funciones como printf no sabrían dónde termina su cadena y continuarían leyendo la memoria hasta que encuentren aleatoriamente un byte cero, produciendo a menudo una salida de basura.
char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// El \0 le dice a C: "The string ends here"Cuando inicializas una cadena con un literal como "Hello", C añade automáticamente el terminador nulo por ti. Pero cuando construyes manualmente una cadena carácter por carácter, debes recordar añadir \0 al final.
Este terminador nulo es la razón por la cual una palabra de 5 caracteres como "Hello" necesita un arreglo de caracteres de 6 elementos: un espacio extra para el \0. Comprender este concepto es esencial porque es la base de cómo todas las funciones de cadenas de C determinan dónde comienzan y terminan las cadenas.
Desafío
FácilEscribe un programa en C que demuestre la creación y el trabajo con cadenas utilizando la inicialización manual carácter por carácter con la terminación nula adecuada. Tu programa debe:
- Declarar un arreglo de caracteres llamado
namecon exactamente 5 elementos - Inicializar manualmente el arreglo
namecarácter por carácter para deletrear "John" con la terminación nula adecuada:- Primer elemento: 'J'
- Segundo elemento: 'o'
- Tercer elemento: 'h'
- Cuarto elemento: 'n'
- Quinto elemento:
'\0'(terminador nulo)
- Declarar un segundo arreglo de caracteres llamado
citycon exactamente 7 elementos - Inicializar manualmente el arreglo
citycarácter por carácter para deletrear "Boston" con la terminación nula adecuada:- Usar asignaciones de caracteres individuales para 'B', 'o', 's', 't', 'o', 'n', y
'\0'
- Usar asignaciones de caracteres individuales para 'B', 'o', 's', 't', 'o', 'n', y
- Imprimir ambas cadenas usando
printfcon el especificador de formato%s - Demostrar qué sucede sin la terminación nula creando un tercer arreglo de caracteres llamado
testcon 4 elementos - Inicializar
testsolo con los caracteres 'A', 'B', 'C', 'D' (sin terminador nulo) - Imprimir el arreglo
testusando%spara mostrar una salida impredecible
Tu salida debe mostrar los resultados en el siguiente formato:
Name: John
City: Boston
Test without null terminator: ABCD[unpredictable characters]Este desafío pone a prueba tu comprensión de la construcción manual de cadenas, la importancia crítica del terminador nulo '\0' en las cadenas de C, y cómo printf con %s depende de encontrar el terminador nulo para saber dónde termina la cadena.
Hoja de referencia
Las cadenas de C son arreglos de caracteres que deben terminar con un terminador nulo \0 para marcar el final de la cadena.
El terminador nulo tiene el valor ASCII cero y le indica a funciones como printf dónde termina la cadena:
char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// El \0 le indica a C: "La cadena termina aquí"Al usar literales de cadena como "Hello", C añade automáticamente el terminador nulo. Al construir cadenas carácter por carácter, debes añadir manualmente \0.
Una cadena necesita un elemento de arreglo adicional para el terminador nulo - "Hello" (5 caracteres) requiere un arreglo de 6 elementos.
Pruébalo tú mismo
#include <stdio.h>
int main() {
// TODO: Escribe tu código aquí
// Declara e inicializa los arreglos de caracteres como se especifica
// Imprime los resultados
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