Это на самом деле вопрос об огромном количестве функций winapi.
Типичная документация MS гласит (от http://msdn.microsoft.com/en-us/library/bb762194(VS.85).aspx):
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}, чтобы быть в безопасности, мне бы очень хотелось знать - есть ли место, где описан этот материал? Может быть, какая-то страница для всех функций, связанных с путями, я не знаю ...