📜  cpp 中的字符串复制 - C++ (1)

📅  最后修改于: 2023-12-03 15:00:03.053000             🧑  作者: Mango

C++中的字符串复制

在C++中,字符串的操作是非常常见的操作之一。字符串复制即为将一个字符串的内容复制到另一个字符串中。C++中提供了多种方法用于字符串复制。

方法一:使用strcpy函数

strcpy函数是C/C++中的一个标准库函数,用于将一个字符串复制到另一个字符串中。调用格式如下:

char* strcpy(char* dest, const char* src);

其中,dest为目标字符串的地址,src为源字符串的地址。

示例代码如下:

#include <iostream>
#include <cstring>

using namespace std;

int main(){
    char str1[] = "Hello, world!";
    char str2[20];
    strcpy(str2, str1);
    cout << str2 << endl;
    return 0;
}

输出结果为:

Hello, world!
方法二:使用strncpy函数

strncpy函数也是C/C++标准库中提供的函数,与strcpy函数不同的是,strncpy函数可以指定需要复制的字符个数。调用格式如下:

char* strncpy(char* dest, const char* src, size_t n);

其中,n为需要复制的字符个数。

示例代码如下:

#include <iostream>
#include <cstring>

using namespace std;

int main(){
    char str1[] = "Good morning!";
    char str2[20];
    strncpy(str2, str1, 6);
    str2[6] = '\0'; //手动添加字符串结束符
    cout << str2 << endl;
    return 0;
}

输出结果为:

Good m

需要注意的是,当源字符串的长度小于复制的字符个数时,会在目标字符串中添加用\0填充的空字符直到复制的字符个数为止。因此,在复制完字符串后需要手动添加字符串结束符。

方法三:使用memcpy函数

memcpy函数是C/C++标准库中的另一个函数,与strcpy和strncpy函数不同的是,memcpy函数可以用于复制任意类型的数据,包括字符串。调用格式如下:

void* memcpy(void* dest, const void* src, size_t n);

其中,dest为目标地址,src为源地址,n为需要复制的字节数。

示例代码如下:

#include <iostream>
#include <cstring>

using namespace std;

int main(){
    char str1[] = "Good evening!";
    char str2[20];
    memcpy(str2, str1, 6);
    str2[6] = '\0'; //手动添加字符串结束符
    cout << str2 << endl;
    return 0;
}

输出结果为:

Good e

需要注意的是,由于memcpy函数只是简单地按字节进行复制,因此在复制字符串时需要手动添加字符串结束符。

方法四:使用=赋值运算符

在C++中,字符串可以使用=赋值运算符进行复制操作。但需要注意的是,使用=赋值运算符仅适用于字符数组类型的字符串。示例代码如下:

#include <iostream>

using namespace std;

int main(){
    char str1[] = "Good night!";
    char str2[20];
    str2 = str1; //编译错误
    cout << str2 << endl;
    return 0;
}

由于使用=赋值运算符不能用于字符数组类型的赋值操作,因此编译时会出现错误。但可以使用strcpy函数代替。