Does SHGetPathFromIDList() (and similar) put a terminating 0 in its argument?
这实际上是关于大量winapi函数的问题。
典型的MS文档说(来自http://msdn.microsoft.com/zh-cn/library/bb762194(VS.85).aspx):
1 2 3 4 5 6 7 8 9 10 | BOOL SHGetPathFromIDList( PCIDLIST_ABSOLUTE pidl, LPTSTR pszPath ); pidl [in] The address of an item identifier list that specifies a file or directory location relative to the root of the namespace (the desktop). pszPath [out] The address of a buffer to receive the file system path. This buffer must be at least MAX_PATH characters in size. |
它没有说明是否将终止0写入pszPath。 同样,它也没有说路径是否可以填充pszPath,那里没有空间容纳0。
在yeidls上搜索大约50/50的分配了MAX_PATH + 1个字符的缓冲区的用户和仅处理MAX_PATH的用户的分布。
为了安全起见,我当然可以做一些类似char buf [MAX_PATH + 1] = {0}的事情,但我真的很想知道-是否在某些地方描述了这些内容? 我可能不知道所有与路径相关的功能的页面...
对于
要回答标题问题:是。它是LPTSTR定义的一部分-字符串的指针。它也反映在前缀中:
也有一个非null终止的字符串类型,但是在userland API的
我不知道此函数(或其他函数)的实际行为,但我建议针对此函数编写一些单元测试...如果不使用所有缓冲区,会发生什么?如果这样做会怎样?等等。这些不仅会记录您的假设,而且如果函数改变了其行为方式,则单元测试将发出警告,而不会出现令人讨厌的错误报告。