Menu
Coddy logo textTech

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.

challenge icon

Desafío

Fácil

Escribe 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:

  1. Declarar un arreglo de caracteres llamado name con exactamente 5 elementos
  2. Inicializar manualmente el arreglo name cará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)
  3. Declarar un segundo arreglo de caracteres llamado city con exactamente 7 elementos
  4. Inicializar manualmente el arreglo city cará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'
  5. Imprimir ambas cadenas usando printf con el especificador de formato %s
  6. Demostrar qué sucede sin la terminación nula creando un tercer arreglo de caracteres llamado test con 4 elementos
  7. Inicializar test solo con los caracteres 'A', 'B', 'C', 'D' (sin terminador nulo)
  8. Imprimir el arreglo test usando %s para 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;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Logic & Flow