48

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

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

但每当我使用

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

我收到此错误:

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

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

4

4 回答 4

70

您不应该使用strcpy()复制 a std::string,仅将其用于C-Style strings

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

string a = "text";
string b = "image";
b = a;
于 2012-10-01T18:25:39.113 回答
18

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"

于 2012-10-01T18:25:37.170 回答
4

strcpy 示例:

#include <stdio.h>
#include <string.h>

int main ()
{
  char str1[]="Sample string" ;
  char str2[40] ;
  strcpy (str2,str1) ;
  printf ("str1: %s\n",str1) ;
  return 0 ;
}

输出:str1: Sample string

你的情况:

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

string str1="Sample string" ;
string str2 = str1 ;
于 2012-10-01T18:42:26.623 回答
3

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

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

您可以尝试

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

或者

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

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

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

两者都data返回c_str真正strcpy()想要的东西。

于 2014-10-10T15:36:02.637 回答