Dominando funciones de cadena en C++: strcpy, strcat, strlen, strcmp – Ejemplos prácticos
¿Qué es una cadena?
Una cadena es simplemente una secuencia de caracteres. En C++ moderno solemos trabajar con objetos de la clase std::string, que gestiona automáticamente la asignación de memoria, el redimensionamiento y una gran cantidad de funciones miembro útiles. Esto elimina la necesidad de gestión manual de búferes y reduce el riesgo de desbordamientos.
Con fines educativos, C++ sigue soportando las tradicionales cadenas de estilo C terminadas en null. Ambos enfoques tienen su lugar: use std::string para la programación diaria, y reserve las cadenas de estilo C para APIs heredadas o código de bajo nivel crítico para el rendimiento.
Declaración de cadenas
- Cadena de caracteres estilo C: un array unidimensional de
charterminado por un carácter nulo (\0). - std::string: una clase de la Biblioteca Estándar de C++ que proporciona una rica interfaz para manipulación de cadenas.
Cadena de caracteres estilo C
Ejemplo:
char nombre[5] = {'J', 'o', 'h', 'n', '\0'};
O más concisamente:
char nombre[] = "John"; // el compilador inserta el '\0' final
std::string
Para usar std::string, incluya la cabecera y declare una variable:
#include <string> std::string nombre = "John";
Acceso a valores de cadena
A continuación, un programa de consola simple que imprime una cadena estilo C y un valor std::string.
#include <iostream>
#include <string>
using namespace std;
int main() {
char cNombre[5] = "John"; // cadena estilo C
string cppNombre = "Guru99"; // std::string
cout << "Cadena estilo C: " << cNombre << endl;
cout << "std::string: " << cppNombre << endl;
return 0;
}
Salida:

Funciones clave de cadenas C
Estas funciones están definidas en la cabecera cstring. Operan sobre cadenas de estilo C (arrays de char terminados en null).
strcpy()
Copia la cadena origen en el búfer destino. El destino debe ser lo suficientemente grande para contener el origen.
strcpy(dest, origen); // dest debe tener espacio suficiente
strcat()
Anexa la cadena origen al final de la cadena destino. De nuevo, el búfer destino debe ser lo bastante grande para acomodar el resultado.
strcat(dest, origen); // dest debe tener espacio suficiente
strlen()
Devuelve el número de caracteres en la cadena, excluyendo el byte nulo final.
size_t len = strlen(cad);
strcmp()
Compara dos cadenas lexicográficamente. Devuelve 0 si son iguales, un valor negativo si la primera es menor, y positivo si la primera es mayor.
int cmp = strcmp(cad1, cad2);
Ejemplo práctico
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char nombre1[10] = "Guru99";
char nombre2[10] = "John";
char nombre3[20]; // Asegurar espacio para resultado concatenado
// Copia
strcpy(nombre3, nombre1);
cout << "strcpy(nombre3, nombre1): " << nombre3 << endl;
// Concatenación
strcat(nombre1, nombre2);
cout << "strcat(nombre1, nombre2): " << nombre1 << endl;
// Longitud
size_t len = strlen(nombre1);
cout << "strlen(nombre1): " << len << endl;
// Comparación
int cmp = strcmp(nombre1, nombre3);
cout << "strcmp(nombre1, nombre3): " << cmp << endl;
return 0;
}
Salida:

Conclusiones
- Use
std::stringpara la mayoría del código C++ – es más seguro y fácil. - Cuando deba trabajar con arrays de caracteres crudos, las funciones de
cstringson esenciales. - Siempre asegúrese de que los búferes destino sean lo bastante grandes para evitar desbordamientos.
- Use
strlensolo cuando necesite la longitud;std::string::size()es preferible para objetosstd::string. - Prefiera
strcmppara APIs heredadas;std::string::compare()o eloperator==sobrecargado dan semántica más clara en C++ moderno.
Lenguaje C
- Variables y tipos de datos en C++: Guía experta sobre int, double, char, string, bool
- Arrays en C++: Declaración, inicialización y técnicas con punteros
- Bucle do‑while en C++: Sintaxis, ejemplos prácticos y bucles anidados
- Dominando punteros en C++: Conceptos, ejemplos y aplicaciones prácticas
- Dominando el tipo de dato char en C++: Declaración, ASCII y técnicas de conversión
- Sobrecarga de operadores en C++: Guía práctica con ejemplos de código
- Funciones en C++ Explicadas con Ejemplos de Código Prácticos
- Cadenas en C hechas fáciles: Declaración, entrada, salida y funciones de biblioteca
- Dominar Strings en Java: Creación, Métodos y Mejores Prácticas
- Dominando representaciones String en Enums de Java
- Dominando Java String.indexOf(): Localizar subcadenas y ejemplos prácticos