1

我应该给它腾出空间吗,像这样:

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

或者是:

len = MAX_PATH + sizeof(_TCHAR);

正确的大小来容纳包括 unicode 的路径?

4

3 回答 3

10

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];
于 2014-05-04T03:32:30.660 回答
3

MAX_PATH定义为 260,Windef.h与 Unicode 无关。

如果您持有字节数,第一种方法很好。第二种方法没有任何意义。如果您持有多个字符,则应使用MAX_PATH+1.

于 2014-05-04T03:37:20.620 回答
2

MAX_PATH 宏定义(260 字节)是采用的 ANSI 标准。不幸的是,这个标准早在 32 位操作系统出现之前就已经开发出来了。

目前,Unicode 版本的 (Windows) 文件库支持最多 32,767 字节的路径。但是,MAX_PATH 定义保持与(16 位)MS-DOS 相同

于 2014-05-04T03:42:42.773 回答