wsprintf
使用_cdecl调用约定,就像printf
一样。后者从堆栈弹出以null结尾的格式字符串的地址。但是wsprintf
的winapi定义使用LPCTSTR类型,例如最后没有空。
我想知道,LPCTSTR lpFmt的长度是如何计算的?我的意思是,该函数应该在某个时刻停止读取格式缓冲区。确实如此。它有效。
答案 0 :(得分:1)
LPCTSTR
以null结尾。它是
const char*
或
const wchar_t*
取决于您是否以Unicode为目标。但不管怎样,它都是空终止的。
答案 1 :(得分:0)
UNICODE的LPCTSTR定义为LPCWSTR,在msdn docs中,您可以读取LPCWSTR定义为:
指向16位Unicode的常量以null结尾的字符串的指针 字符。有关更多信息,请参阅使用的字符集
所以wsprintf读取格式,直到找到L'\ 0'字符。它实际上没有在wsprintf doc。
中明确写出答案 2 :(得分:0)
你混淆了许多事情
_cdecl从__stdcall推迟如何推送堆栈中的参数,它与NULL终止的字符串无关。
然后LPCTSTR,LPSTR,char * wchar *,都是以NULL结尾的字符串(区别在于其中一些是Unicode,而其他是Ansi
micrsoft使用它的其他类型的字符串(这里没有提到)是BSTR,BSTR不是终止字符串,它的len用buff [-1]来表示; (BSTR是一串16位字符,如Unicode)