【发布时间】:2014-06-20 13:29:50
【问题描述】:
我应该给它腾出空间吗,像这样:
len = MAX_PATH * sizeof(_TCHAR) + sizeof(_TCHAR);
或者是:
len = MAX_PATH + sizeof(_TCHAR);
存放包含 unicode 的路径的大小合适吗?
【问题讨论】:
我应该给它腾出空间吗,像这样:
len = MAX_PATH * sizeof(_TCHAR) + sizeof(_TCHAR);
或者是:
len = MAX_PATH + sizeof(_TCHAR);
存放包含 unicode 的路径的大小合适吗?
【问题讨论】:
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];
【讨论】:
MAX_PATH个字符就够了,例如TCHAR szPath[MAX_PATH];。 NUL 字符已包含在数字中;见MSDN page on naming files
MAX_PATH 在Windef.h 中定义为 260,与 Unicode 无关。
如果您持有字节数,则第一种方法很好。第二种方法没有任何意义。如果你持有的字符数,你应该使用MAX_PATH+1。
【讨论】:
MAX_PATH 宏定义(260 字节)是采用的 ANSI 标准。不幸的是,这个标准早在 32 位操作系统出现之前就已经开发出来了。
目前,Unicode 版本的 (Windows) 文件库支持最多 32,767 字节的路径。 但是,MAX_PATH 的定义与(16 位)MS-DOS 的定义保持一致
【讨论】: