Почему в моем TCHAR есть мусор, даже после ZeroMemory ()? - PullRequest
0 голосов
/ 20 мая 2010

Я унаследовал следующую строку кода:

TCHAR temp[300];
GetModuleFileName(NULL, temp, 300);

Однако, это терпит неудачу, так как первые 3 байта заполнены значениями мусора (всегда те же самые, хотя -128, -13, 23, в этом порядке). Я сказал, хорошо, и изменил его на:

TCHAR temp[300];
ZeroMemory(temp, 300);
GetModuleFileName(NULL, temp, 300);

но значения мусора сохранились! Обратите внимание, что после вызова ZeroMemory () все остальные байты были обнулены должным образом, а после GetModuleFileName () каталог был правильно сохранен в буфере. Это как если бы temp был заменен на temp + 3. Может ли это быть как-то связано с границами слов?

Может кто-нибудь объяснить, что происходит и как это исправить?

1 Ответ

1 голос
/ 20 мая 2010

ZeroMemory работает в байтах, тогда как у вас есть массив 300 TCHAR с. Это заставляет меня предположить, что вы работаете с опцией широкоформатной (не многобайтовой) компиляции.

Вы должны использовать:

ZeroMemory(temp, 300 * sizeof(TCHAR));

Или в вашем конкретном случае:

ZeroMemory(temp, sizeof(temp));

Однако будьте осторожны с последним. Это применимо, если temp является автоматическим массивом, объявление которого видно внутри функции. Если это указатель, размер выделения которого «невидим» для компилятора - sizeof выдаст только размер указателя.

...