Z>_tcscpy_s(sClass, iLen*sizeof(TCHAR), _T("RUAHM About Window Class")); // iLen*sizeof(TCHAR)=0x32=50
Z>
Z>Вопрос: Что я делаю не так?
ваш код некорректен, если sizeof(TCHAR) > 1
зы не используйте мелкософтовские быдлоподелки, если не знаете что они делают, используйте стандартный std::copy.
Здравствуйте, Sni4ok, Вы писали:
S>зы не используйте мелкософтовские быдлоподелки, если не знаете что они делают, используйте стандартный std::copy.
Зачем std::copy, когда речь идёт о строке?! strcpy — легальный способ.
Другое дело, что размер строки нужно указывать правильно, т.е. в элементах, а не в байтах.
Здравствуйте, zombiee, Вы писали:
Z>Могут быть причины перевода проекта с юникода на анси в любой момент (не спрашивайте, какие )
Враждебная пропаганда!
Я бы перепроверил
Собственно, началось все с того, что при написании класса стала портиться куча после инициализации массива TCHAR
Экспериментальным путем дошел до того, что:
size_t iLen=_tcslen(_T("RUAHM About Window Class")); // len=0x18=24 // подстраховка, мало ли о_О
TCHAR *sClass=new TCHAR[++iLen]; // iLen+1=0x19=25 (++ for null-terminated)
ZeroMemory(sClass, iLen*sizeof(TCHAR)); // iLen*sizeof(TCHAR)=0x32=50
_tcscpy_s(sClass, iLen*sizeof(TCHAR), _T("RUAHM About Window Class")); // iLen*sizeof(TCHAR)=0x32=50delete []sClass; // HEAP[RUAHM_About.exe]: Heap block at 00AD35A0 modified at 00AD35FE past requested size of 56
Если идти в недра CRT, видно, что в new передается как раз не 0x19 (25), а 0x32 (50), т.е выделяются нужные 50 байт памяти.
После я копирую строку длинной 0x19 (25) (+ завершающий ноль) (Unicode строка, 2 байта на один символ) — на этом куча портится.
Это все в debug версии, в release проблем нет О_о
Вопрос: Что я делаю не так?
P.S: код
TCHAR *s=new TCHAR[++iLen*sizeof(TCHAR)]; // (iLen+1)*2=0x32=50 (++ for null-terminated)
Уже не вызывает проблем, но выделяется же 100 байт памяти, а не 50. Разве так и надо? Я что-то где-то упустил?
Объясните, пожалуйста.
Здравствуйте, о_О, Вы писали: о_О>выкинуть нахрен универсальные макросы, писать везде wchar_t
Почему?
о_О>посмотреть какие параметры принимает wcscpy_s не ожидал, что косяк будет именно в этом. И именно в моей не внимательности.
Огромное спасибо!
Здравствуйте, о_О, Вы писали:
о_О>а зачем?
Могут быть причины перевода проекта с юникода на анси в любой момент (не спрашивайте, какие )
По этому приходится извращаться.
Здравствуйте, zombiee, Вы писали:
Z>Могут быть причины перевода проекта с юникода на анси в любой момент (не спрашивайте, какие ) Z>По этому приходится извращаться.