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; }
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; }
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; }
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; }
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; }
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; }
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