El terminador nulo
Parte de la sección Lógica y Flujo 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 cómo crear y trabajar con cadenas mediante la inicialización manual carácter por carácter con una 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 escribir "John", con una 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 escribir "Boston", con una terminación nula adecuada:- Usar asignaciones individuales de caracteres para 'B', 'o', 's', 't', 'o', 'n' y
'\0'
- Usar asignaciones individuales de caracteres para 'B', 'o', 's', 't', 'o', 'n' y
- Imprimir ambas cadenas usando
printfcon el especificador de formato%s - Demostrar qué sucede sin una terminación nula creando un tercer arreglo de caracteres llamado
testcon 4 elementos - Inicializar
testúnicamente 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 con 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.
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 Lógica y Flujo
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 cadenasPractica por tu cuenta: Compilador de C online