Вопрос C++ использование memcpy для заполнения полей структуры

Регистрация
30 Ноя 2013
Сообщения
66
Репутация
0
Спасибо
0
Монет
0
Каким образом в C++ нужно заполнять поля структуры передавая в функцию по ссылке?

Предположим, имеется структура:
typedef struct File
{
public:
LPWSTR name;
LPWSTR extension;
} *LPFile;

и функция
void fill(LPFile lpf)
{
std::wstring fileName((LPWSTR)lpf->name);
size_t i = fileName.find_last_of('.', fileName.length());

if (i != fileName.npos)
{
std::wstring strExtension = fileName.substr(i, fileName.length() - i);
lpf->extension = (LPWSTR)strExtension.c_str();
//memcpy(&lpf->extension, strExtension.c_str(), sizeof(strExtension.c_str()) + 1);
}

wcout << lpf->extension << endl;
}

Естественно ничего не выведется - ошибка...
Я думаю, надо как-то заюзать memcpy.

Не предлагайте строковых методов для копирования, т. к. типы в структуре быть могут и не строковые.
 
memcpy( куда, откуда, количество байт для копирования ) незнаю на счёт sizeof(strExtension.c_str()) + 1 может и верно, но я не могу понять как это так. ведь нужно размер строки в байтах strExtension.size() * sizeof( wchar_t ) // возможно у string есть спец функция для етого lpf->extension должна иметь выделенную память для хранения строки lpf->extension = new wchar_t[ strExtension.size() + 1 ]; memcpy( &lpf->extension, strExtension.c_str(), strExtension.size() * sizeof(wchar_t) ); lpf->extension[ strExtension.size() ] = 0;
 
Назад
Сверху