0

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

编码:

播放器.hpp:

string name;
Player(string);

播放器.cpp:

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

错误:

  • 函数调用中的参数过多
  • 没有重载函数“strcpy_s”的实例与参数列表匹配
4

2 回答 2

4

你不能strcpy_s用来复制std::string。实际上,您只需要这样做:

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

更好的是,您可以使用构造函数初始化列表

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

作为参考,这里有std::string类的详细描述。

于 2012-07-13T21:59:15.883 回答
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* 参数 - 不适用于字符串数据类型)

于 2012-07-13T22:01:25.397 回答