Всегда ли MAX_PATH одинакового размера, даже если определен макрос _UNICODE?

Должен ли я освободить место, как это:

 len = MAX_PATH * sizeof(_TCHAR) + sizeof(_TCHAR);

или это:

len = MAX_PATH + sizeof(_TCHAR);

Правильный размер для хранения пути, включая Юникод?

1

Решение

MAX_PATH (который всегда 260) выражается в символах, а не в байтах.

Используйте первый при выделении необработанной памяти, выраженной в байтовых размерах, например:

LPTSTR path = (LPTSTR) LocalAlloc(LMEM_FIXED, (MAX_PATH + 1) * sizeof(TCHAR));

Используйте второй при выделении памяти, которая выражается в символах, например:

TCHAR path[MAX_PATH + 1];

LPTSTR path = new TCHAR[MAX_PATH +1];
9

Другие решения

MAX_PATH определяется как 260 в Windef.h независимо от Unicode.

Первый подход хорош, если вы держите количество байтов. Второй подход не имеет никакого смысла. Если вы держите количество символов, вы должны использовать MAX_PATH+1,

3

Определение макроса MAX_PATH (260 байт) является принятым стандартом ANSI. К сожалению, этот стандарт был разработан задолго до появления 32-битной ОС.

В настоящее время Unicode-версии файловых библиотек (Windows) поддерживают путь до 32 767 байт.
Однако определение MAX_PATH остается таким же, как и для (16-разрядной) MS-DOS

1
По вопросам рекламы [email protected]