C ++ - strcpy_s参数错误

时间:2012-07-13 21:54:55

标签: c++ stdstring

使用strcpy_s时出现了一些错误,无法弄清楚我做错了什么。

代码:

Player.hpp:

string name;
Player(string);

Player.cpp:

Player::Player(string newName)
{
    strcpy_s(name, name.size(), newName);//error is here
    health = 20;
}

错误:

  • 函数调用中的参数太多
  • 没有重载函数'strcpy_s'匹配参数列表
  • 的实例

2 个答案:

答案 0 :(得分:4)

您无法使用strcpy_s复制std::string。实际上,你只需要这样做:

Player::Player(string newName) {
    name = newName;
    health = 20;
}

更好的是,您可以使用constructor initialization list

Player::Player(string newName) : name(newName), health(20) {}

作为参考,您可以在此处详细了解std::string类。

答案 1 :(得分:2)

此URL指出C ++版本仅使用模板重载 函数(2个参数不是3):

http://msdn.microsoft.com/en-us/library/td1esda9%28v=vs.80%29.aspx

模板 errno_t strcpy_s(    char(& strDestination)[size],    const char * strSource ); //仅限C ++

根据此网址:

在C ++中,使用这些函数可以通过模板重载简化;重载可以自动推断缓冲区长度(无需指定大小参数),并且它们可以自动用较新的,安全的对应物替换旧的非安全功能。有关更多信息,请参阅安全模板重载。

(如原型中所述,此函数用于char *参数 - 不适用于字符串数据类型)