Итак, я пытаюсь исправить свое назначение 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 "не соответствует типам аргументов list: (char *, char *)".
Нестандартные 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);
Взгляните на документацию: http://msdn.microsoft.com/en-us/library/td1esda9%28v=vs.90%29.aspx
Когда размер не может быть определен автоматически, потому что массив статического размера не передается, вы должны его предоставить.
#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;
}
char s[100];
Шаблонная перегрузка может автоматически определять размер. Я добавил пример обоих в ответ.
Следующее должно работать:
strcpy_s(guest, strlen(name), name); //copy second argument into new space