即使定义了_UNICODE宏,MAX_PATH总是大小相同吗?

时间:2014-05-04 03:26:06

标签: c++ c winapi max-path

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

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

或是:

len = MAX_PATH + sizeof(_TCHAR);

保持包含unicode的路径的正确大小?

3 个答案:

答案 0 :(得分:9)

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];

答案 1 :(得分:3)

MAX_PATHWindef.h中定义为260,与Unicode无关。

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

答案 2 :(得分:1)

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

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