如何复制2个字符串数据类型的字符串

时间:2012-10-01 18:23:31

标签: c++ string

如何复制2个字符串(这里我指的是字符串数据类型)。我使用了strcpy函数,只有在

时才有效
char a[7]="text";
char b[5]="image";
strcpy(a,b);

但每当我使用

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

我收到此错误

  

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

4 个答案:

答案 0 :(得分:37)

你不应该使用strcpy来复制std :: string,只能将其用于C-Style strings

如果您要将a复制到b,请使用= operator

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

答案 1 :(得分:11)

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"

答案 2 :(得分:3)

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 ;

答案 3 :(得分:2)

凯撒的解决方案在我看来是最好的,但是如果您仍然坚持使用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*指针作为参数。

datac_str都会返回strcpy完全想要的内容。