Fundamentos de C/C++

Arreglos y cadenas en C y C++

En esta lección vas a recorrer un arreglo de tamaño fijo y calcular la longitud de una cadena de forma segura en C y C++.

Introducción

Un arreglo es una secuencia de elementos del mismo tipo guardados uno tras otro en memoria. En C, una cadena es un arreglo de caracteres que termina con el carácter nulo '\0'. En C++, en cambio, std::string gestiona su propia memoria y siempre conoce la longitud del texto.

Puntos importantes

  • Activa los avisos del compilador (compiler warnings) y corrígelos todos.
  • Entiende bien el tipo y la vida útil (lifetime) de cada valor.
  • Comprueba siempre los datos de entrada y los límites de los índices de los arreglos.

Mira cómo funciona

Una cadena en C es un array de caracteres que termina en '\0'. Haz clic en un carácter para ver su índice y su dirección de memoria.

Ejemplos de código C y C++

C
Ejecutar →
main.c
#include <stdio.h>
#include <string.h>

int main(void) {
    int values[] = {3, 5, 8, 13};
    char name[] = "Ada";
    size_t count = sizeof values / sizeof values[0];
    printf("%s: %zu values, %zu letters\n", name, count, strlen(name));
    return 0;
}
Resultado de la ejecución
Ada: 4 values, 3 letters
C++
Ejecutar →
main.cpp
#include <array>
#include <iostream>
#include <string>

int main() {
    std::array values{3, 5, 8, 13};
    std::string name = "Ada";
    std::cout << name << ": " << values.size()
              << " values, " << name.size() << " letters\n";
}
Resultado de la ejecución
Ada: 4 values, 3 letters

Comparación entre C y C++

La expresión sizeof values / sizeof values[0] calcula el número de elementos de un arreglo declarado en la misma función, pero no funciona con un arreglo pasado a una función como puntero. La función strlen tiene que recorrer cada carácter hasta el '\0' para saber la longitud, mientras que std::string::size() la devuelve de inmediato.

C

C usa funciones procedurales pequeñas y muestra abiertamente cómo se representan los datos en memoria.

C++

C++ sigue permitiendo trabajar a bajo nivel, pero añade tipos de biblioteca y abstracciones más seguras.

Ejercicios de práctica

Ejecuta las dos versiones y después modifica el código para ver la diferencia de seguridad que aporta cada lenguaje.

  • Prueba entradas no válidas y valores límite.
  • Compila con las opciones -Wall -Wextra -Wpedantic para activar más avisos.
  • Pon las declaraciones comunes en un archivo de cabecera y la implementación en un archivo aparte.

Practica con un reto

Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.

Todos los retos