我应该腾出空间,像这样:
len = MAX_PATH * sizeof(_TCHAR) + sizeof(_TCHAR);
或是:
len = MAX_PATH + sizeof(_TCHAR);
保持包含unicode的路径的正确大小?
答案 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_PATH
在Windef.h
中定义为260,与Unicode无关。
如果你持有字节数,第一种方法就没问题。第二种方法没有任何意义。如果您持有多个字符,则应使用MAX_PATH+1
。
答案 2 :(得分:1)
MAX_PATH宏定义(260字节)是采用的ANSI标准。不幸的是,这个标准是在32位操作系统出现之前很久就开发出来的。
目前,(Windows)文件库的Unicode版本支持最多32,767字节的路径。 但是,MAX_PATH定义保持原样(16位)MS-DOS