如何在C++中复制标准::字符串类型的字符串

How to copy a string of std::string type in C++?

本文关键字:字符串 类型 标准 复制 C++      更新时间:2023-10-16

我使用了strcpy()函数,它仅在使用C字符串数组时才有效,例如:

char a[6] = "text";
char b[6] = "image";
strcpy(a,b);

但每当我使用

string a = "text";
string b = "image";
strcpy(a,b);

我收到此错误:

函数.cpp:调用strcpy(std::string&, std::string&)没有匹配函数

如何在C++中复制2个字符串数据类型的字符串?

你不应该使用 strcpy() 来复制std::string,只用于 C 样式字符串。

如果要将a复制到b则只需使用 = 运算符即可。

string a = "text";
string b = "image";
b = a;

strcpy 仅适用于 C 字符串。对于 std::string,您可以像复制任何C++对象一样复制它。

std::string a = "text";
std::string b = a; // copy a into b

如果要连接字符串,可以使用+运算符:

std::string a = "text";
std::string b = "image";
a = a + b; // or a += b;

您甚至可以一次执行多项操作:

std::string c = a + " " + b + "hello";

尽管"hello" + " world"无法按预期工作。你需要一个明确的 std::string 在那里:std::string("Hello") + "world"

> strcpy 示例:

#include <stdio.h>
#include <string.h>
int main ()
{
  char str1[]="Sample string" ;
  char str2[40] ;
  strcpy (str2,str1) ;
  printf ("str1: %sn",str1) ;
  return 0 ;
}

输出:str1: Sample string

您的案例:

一个简单的=操作员应该完成这项工作。

string str1="Sample string" ;
string str2 = str1 ;

在我看来,Caesar 的解决方案是最好的,但如果你仍然坚持使用 strcpy 函数,那么在你准备好字符串之后:

string a = "text";
string b = "image";

您可以尝试以下任一操作:

strcpy(a.data(), b.data());

strcpy(a.c_str(), b.c_str());

只需调用 std::string 类的 data()c_str() 成员函数,即可获取字符串对象的char*指针。

strcpy()函数没有重载来接受两个std::string对象作为参数。它只有一个重载来接受两个char*指针作为参数。

datac_str都返回strcpy()想要的东西。