📜  在 C/C++ 中复制字符串的不同方法

📅  最后修改于: 2021-09-03 03:09:03             🧑  作者: Mango

使用内置函数

strcpy():

使用字符串 .h头文件中的内置函数strcpy() 将一个字符串复制到另一个字符串。 strcpy() 接受指向目标数组和源数组的指针作为参数,复制后返回指向目标字符串的指针。用%s就可以打印字符串(%s打印从基地地址,直到空字符的字符串)。

下面是使用上述方法的实现:

C
// C program to copy the string using
// strcpy function
 
#include 
#include 
#include 
 
// 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;
}


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


C
// C program to copy string using loops
 
#include 
#include 
#include 
 
// 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;
}


C
// C program to copy the string
// using pointers
 
#include 
#include 
#include 
 
// 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;
}


C
// C program to copy the string
 
#include 
#include 
 
// 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;
}


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


输出:
GeeksforGeeks

内存():

memcpy() 也在字符串.h 标头中定义,用于从源复制到目标,无论源数据包含什么。 memcpy() 需要传递一个大小参数。

主要区别在于 memcpy() 始终复制指定字节的确切数量;另一方面,strcpy() 和其他 str 方法将复制,直到它读取 NULL (‘\0’) 字节,然后停止。 strcpy() 不打算与以零结尾的 C 字符串一起使用。

memcpy() 经过硬件优化,复制速度更快,适用于任何类型的源数据(例如:二进制或加密字节)。 strcpy() 不应使用,除非有任何特定原因,并且如果您知道字符串的长度,则memcpy() 是更好的选择

C

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

使用循环

思路是使用for循环将第一个数组的内容一个个拷贝到第二个数组中。

下面是使用上述方法的实现:

C

// C program to copy string using loops
 
#include 
#include 
#include 
 
// 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

使用指针

这个想法是使用指针将字符串数组的内容复制到另一个数组,并通过遍历新指针来打印结果字符串。

下面是使用上述方法的实现:

C

// C program to copy the string
// using pointers
 
#include 
#include 
#include 
 
// 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

使用指针和后增量

这个想法是使用 while 循环将字符串array1 的内容一一分配给字符串array2 并使用 post运算符递增,因为它返回 ASCII 值,因此条件将为真,它将在循环中并传输直到条件为false,我们将退出循环。

下面是使用上述方法的实现:

C

// C program to copy the string
 
#include 
#include 
 
// 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

使用 sprintf()

我们可以将字符串存储在指定的字符缓冲区或 sprintf() 中的目标字符串中以复制字符串,而不是在输出缓冲区中打印字符串。

C

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

注意:在上述所有方法中,目标数组的大小必须大于源字符串的长度才能复制所有字符。

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live