Diferentes formas de copiar una string en C/C++

Usando la función incorporada

strcpy():

Usando la función incorporada strcpy() del archivo de encabezado string.h para copiar una string a la otra. strcpy() acepta un puntero a la array de destino y la array de origen como parámetro y, después de copiarlo, devuelve un puntero a la string de destino. Usando %s podemos imprimir la string (%s imprime la string desde la dirección base hasta el carácter nulo).

A continuación se muestra la implementación utilizando el método anterior:

C

// C program to copy the string using
// strcpy function
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// Function to copy the string
char* copyString(char s[])
{
    char* s2;
    s2 = (char*)malloc(20);
 
    strcpy(s2, s);
    return (char*)s2;
}
 
// Driver Code
int main()
{
    char s1[20] = "GeeksforGeeks";
    char* s2;
 
    // Function Call
    s2 = copyString(s1);
    printf("%s", s2);
    return 0;
}
Producción: 

GeeksforGeeks

 

memcpy():

memcpy() también se define en el encabezado string.h y se usa para copiar desde el origen al destino sin importar qué contengan los datos de origen. memcpy() requiere que se pase un parámetro de tamaño.

La principal diferencia es que memcpy() siempre copia el número exacto de bytes especificados; strcpy() y otros métodos str, por otro lado, copiarán hasta que lea un byte NULL (‘\0’), y luego se detendrán después de eso. strcpy() no está diseñado para usarse con strings C terminadas en cero.

memcpy() está optimizado por hardware y copia más rápido y funciona con cualquier tipo de datos de origen (como: bytes binarios o cifrados). strcpy() nunca debe usarse a menos que sea por una razón específica, y si conoce la longitud de las strings, memcpy() es una mejor opción .

C

// C program to copy the string using
// memcpy function
#include <stdio.h>
#include <string.h>
 
// Driver Code
int main()
{
    char s1[20] = "GeeksforGeeks";
    char s2[20];
 
    // Function
    memcpy(s2, s1, strlen(s1));
 
    printf("%s\n", s1);
 
    return 0;
}
Producción

GeeksforGeeks

usando bucles

La idea es usar un ciclo for para copiar el contenido de la primera array a la segunda array uno por uno.

A continuación se muestra la implementación utilizando el método anterior:

C

// C program to copy string using loops
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// Function to copy the string
char* copyString(char s[])
{
    int i;
    char* s2;
    s2 = (char*)malloc(20);
 
    // Executing till null character
    // is found
    for (i = 0; s[i] != '\0'; i++) {
 
        // Copy the character one
        // by one from s1 to s2
        s2[i] = s[i];
    }
 
    // Return the pointer of newly
    // created string
    return (char*)s2;
}
 
// Driver Code
int main()
{
    char s1[20] = "GeeksforGeeks";
    char* s2;
 
    // Function Call
    s2 = copyString(s1);
    printf("%s", s2);
    return 0;
}
Producción: 

GeeksforGeeks

 

usando punteros

La idea es copiar el contenido de la array de strings a otra array usando punteros e imprimir la string resultante atravesando el nuevo puntero.

A continuación se muestra la implementación utilizando el método anterior:

C

// C program to copy the string
// using pointers
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// Function to copy the string
char* copyString(char s[])
{
 
    char *s2, *p1, *p2;
 
    s2 = (char*)malloc(20);
    p1 = s;
    p2 = s2;
 
    // Executing till the null
    // character is found
    while (*p1 != '\0') {
 
        // Copy the content of s1 to s2
        *p2 = *p1;
        p1++;
        p2++;
    }
    *p2 = '\0';
 
    return s2;
}
 
// Driver Code
int main()
{
    char s1[20] = "GeeksforGeeks";
    char* s2;
 
    s2 = copyString(s1);
    printf("%s", s2);
    return 0;
}
Producción: 

GeeksforGeeks

 

usando punteros y post-incremento

La idea es usar un ciclo while para asignar el contenido de la array de strings 1 a la array de strings 2 uno por uno e incrementar usando el operador posterior ya que devuelve el valor ASCII para que la condición sea verdadera y estará en el ciclo y se transferirá hasta que la condición sea false, y saldremos del bucle.

A continuación se muestra la implementación utilizando el método anterior:

C

// C program to copy the string
 
#include <stdio.h>
#include <stdlib.h>
 
// Function to copy the string
void copyString(char* t, char* s)
{
    // (return ASCII value which is True,
    // therefore will be in the loop
    // till the condition is False
    while (*t++ = *s++)
        ;
}
 
// Driver Code
int main()
{
    char s2[20] = "GeeksforGeeks";
    char s1[20];
 
    // Function Call
    copyString(s1, s2);
    printf("%s", s1);
    return 0;
}
Producción: 

GeeksforGeeks

 

Usando sprintf()

En lugar de imprimir la string en el búfer de salida, podemos almacenarla en el búfer de caracteres especificado o en la string de destino en sprintf() para copiar la string. 

C

// C program to copy the string using
// sprintf function
#include <stdio.h>
 
// Driver Code
int main()
{
    char s1[20] = "GeeksforGeeks";
    char s2[20];
 
    // Function
    sprintf(s2, "%s", s1);
 
    printf("%s\n", s1);
 
    return 0;
}
Producción

GeeksforGeeks

Nota: En todos los métodos anteriores, el tamaño de la array de destino debe ser mayor que la longitud de la string de origen para copiar todos los caracteres.

Publicación traducida automáticamente

Artículo escrito por nihalkumar703 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *