Uso de strcpy()
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 16 de 63.
Has aprendido a encontrar la longitud de las cadenas con strlen(), ¿pero qué pasa si necesitas copiar el contenido de una cadena en otra? En C, no puedes usar el operador de asignación (=) para copiar cadenas como lo harías con variables normales.
La razón es que las cadenas son arreglos de caracteres, y cuando usas = con arreglos, solo estás copiando la dirección de memoria, no el contenido real. Aquí es donde la función strcpy() de la biblioteca <string.h> se vuelve esencial.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // Copia "Hello" en destinationLa función strcpy() toma dos argumentos: el array de destino (a donde quieres copiar) y la cadena de origen (lo que quieres copiar). Copia cada carácter desde el origen al destino, incluyendo el terminador nulo.
Es crucial que el array de destino sea lo suficientemente grande como para contener la cadena de origen completa más el terminador nulo. Si el destino es demasiado pequeño, strcpy() escribirá más allá de los límites del array, lo que provocará un comportamiento indefinido.
Esta función es fundamental para la manipulación de cadenas en C, permitiéndote duplicar cadenas, inicializar variables de cadena con contenido existente y preparar cadenas para un procesamiento posterior.
Desafío
FácilEscribe un programa en C que demuestre el copiado de cadenas utilizando la función strcpy(). Tu programa debe:
- Leer un entero
nque represente el número de operaciones de cadena a realizar - Para cada operación:
- Leer una cadena de origen (source) desde la entrada
- Declarar un arreglo de caracteres llamado
destinationcon 100 elementos - Usar
strcpy()para copiar la cadena de origen en el arreglo de destino - Imprimir tanto la cadena de origen original como la cadena de destino copiada
- Después de todas las operaciones, demostrar que las cadenas copiadas son independientes:
- Modificando el primer carácter del último arreglo
destinationa 'X' - Imprimiendo la cadena de destino modificada para mostrar que ha cambiado
- Modificando el primer carácter del último arreglo
Recuerda incluir el encabezado <string.h> para usar la función strcpy().
Tu salida debe mostrar los resultados en el siguiente formato:
Source: [source_string]
Destination: [copied_string]
Source: [source_string]
Destination: [copied_string]
...
Modified last destination: [modified_string]Por ejemplo, si la entrada es:
3
hello
world
programmingTu salida debe ser:
Source: hello
Destination: hello
Source: world
Destination: world
Source: programming
Destination: programming
Modified last destination: XrogrammingEste desafío pone a prueba tu comprensión del uso de strcpy() para copiar el contenido de cadenas de un arreglo de caracteres a otro, la asignación adecuada de memoria para los arreglos de destino y demuestra que las cadenas copiadas son independientes de sus orígenes.
Hoja de referencia
Para copiar cadenas en C, usa strcpy() de la biblioteca <string.h>. No puedes usar el operador de asignación (=) para copiar cadenas porque solo copia direcciones de memoria, no el contenido real.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // Copia "Hello" en destinationLa función strcpy() toma dos argumentos: el array de destino (a donde quieres copiar) y la cadena de origen (lo que quieres copiar). Copia cada carácter del origen al destino, incluyendo el terminador nulo.
El array de destino debe ser lo suficientemente grande como para contener toda la cadena de origen más el terminador nulo para evitar un comportamiento indefinido.
Pruébalo tú mismo
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
char source[100];
char destination[100];
// TODO: Escribe tu código aquí
// Usa un bucle para procesar n operaciones de cadenas
// Para cada operación:
// - Lee la cadena de origen
// - Usa strcpy() para copiar el origen al destino
// - Imprime ambas cadenas en el formato requerido
// TODO: Después del bucle, modifica el primer carácter del último destino
// e imprime la cadena modificada
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