我的strcpy_s不能用我的char *指针,为什么?

时间:2013-11-22 02:47:08

标签: c++ string strcpy

好的,所以我正在尝试修复我的C ++赋值,但是当我使用strcpy_s它只适用于我的数组而不是我的*指针..这就是我正在使用的内容:

HotelRoom::HotelRoom(char Num[], int cap, double daily, char* name, int Stat)
{
strcpy_s(room_Num, Num); //copy first argument into room_Num[]
guest = new char[strlen(name) +1]; //create space for the name
strcpy_s(guest, name); //copy second argument into new space
capacity = cap;
dailyRate = daily;
occupancyStat = Stat;
}

这是我以这种方式使用strcpy_s(guest,name)时得到的错误; :

“没有重载函数的实例”strcpy_s“匹配参数列表参数类型是:(char *,char *)”。

3 个答案:

答案 0 :(得分:3)

非标准strcpy_s需要一个额外的参数,而不是std::strcpy,这是您要复制的最大尺寸。

errno_t strcpy_s(char *s1, size_t s1max, const char *s2);

您需要的是标准C函数std::strcpy

char *strcpy(char *s1, const char *s2);

答案 1 :(得分:1)

查看文档:{​​{3}}

如果因为没有传递静态大小的数组而无法自动确定大小,则必须提供它。

#include <string.h>

int main()
{
    char src[] = "Hello World!\n";
    char staticDest[100];
    size_t dynamicSize = strlen(src) + 1;
    char* dynamicDest = new char[dynamicSize];

    //Use the overload that can determine the size automatically
    //because the array size is fixed
    //template <size_t size> errno_t strcpy_s(char(&strDestination)[size], const char *strSource);
    strcpy_s(staticDest, src);

    //Use the overload that requires an additional size parameter because
    //the memory is dynamically allocated
    //errno_t strcpy_s(char *strDestination, size_t numberOfElements, const char *strSource);
    strcpy_s(dynamicDest, dynamicSize, src);

    return 0;
}

答案 2 :(得分:0)

以下内容应该有效:

strcpy_s(guest, strlen(name), name); //copy second argument into new space