我正在开发VS 2010中的C ++项目。我想获得DESKTOP的路径,我已经编写了以下代码,这些代码已在一些教程中给出。
TCHAR path[MAX_PATH];
SHGetSpecialFolderPath(0,path,CSIDL_DESKTOP,FALSE);
printf("Path : %s",path);
但上面的代码刚打印
路径:C
请在上面的代码中进行修正
答案 0 :(得分:3)
使用_tprintf
http://msdn.microsoft.com/en-us/library/wc7014hz.aspx
当TCHAR字符串传递给窄字符串函数(例如printf
)时,数据将逐字节读取,并且当它到达第一个空字符('\ 0')时,它将被解释为字符串的结尾。这就是为什么它只打印TCHAR字符串的第一个字符。
_tprintf
一次查看一个TCHAR
,因此它会继续查看,直到它达到零TCHAR。
答案 1 :(得分:2)
我认为你的项目在设置中有一个字符串'Unicode'。 在这种情况下,TCHAR被视为wchar_t,SHGetSpecialFolderPath被定义为SHGetSpecialFolderPathW,因此,您获得的'DESKTOP'的路径是Unicode,因此您有两种选择来解决此问题。
也就是说,您可以使用相反的情况'S'或's'打印相反的char(char / wchar_t)。 我很高兴我可以帮助你! 哦,我忘了解释输出。 在你的代码中,路径是wchar_t,但是'%s'带有小写's',你的路径被'printf'视为char。
路径中的wchar_t数据(16位)如下:
{L'C',L''',L'W',L'i',L'n',L'd',L'o',L'w',L's',L'\ ',... / 即 /}
char数据(也称为字节数据,8位)如下:
{'C','\ 0','\','\ 0','W','\ 0','i','\ 0',... / ie /}
它看起来就像字符串“C”,因为“\ Windows ... / ** /”位于'null-terminal'标签'\ 0'后面,它被忽略了。