Мой strcpy_s не будет работать с указателем char *, почему?

0

Итак, я пытаюсь исправить свое назначение 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 *)".

  • 1
    Вероятно, бесполезный вопрос, но почему бы вам не использовать строку?
  • 0
    сигнатура другой функции? msdn.microsoft.com/en-us/library/td1esda9(v=vs.90).aspx
Показать ещё 3 комментария
Теги:
string
strcpy

3 ответа

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);
  • 0
    когда я использую: char * strcpy (char * s1, const char * s2); он выводит кучу символов, таких как "== ^ &% $ @". Но когда я использую:
  • 0
    но когда я использую: strcpy_s (char * s1, size_t s1max, const char * s2); это работает, но в конце компиляции это ошибки с ошибкой "break", или что-то в этом роде.
Показать ещё 3 комментария
1

Взгляните на документацию: 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;
}
  • 0
    разве это не то, что я делаю здесь: guest = new char [strlen (name) +1]; разве это не освобождает место для указателя для имени?
  • 0
    Нет, поскольку вы динамически распределяете память, вы должны сообщить функции, насколько большой целевой буфер. Если у вас есть статический массив вроде char s[100]; Шаблонная перегрузка может автоматически определять размер. Я добавил пример обоих в ответ.
Показать ещё 4 комментария
0

Следующее должно работать:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню