Format(LPCTSTR pFormat,... )函数参数传递的问题

worldy 2014-01-19 10:41:16
由于没有全局的Format函数可用,我想定义CString Format(LPCTSTR pFormat,... )函数,由于格式解释太复杂了,我不想自己解释pFormat参数,我只想将参数传递给sprintf或者Cstring::Format,但是不知道如何传递参数,望有高手出招
...全文
233 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2014-01-19
  • 打赏
  • 举报
回复
引用 6 楼 schlafenhamster 的回复:
“逻辑应该不正确”? 这是 MSDN 中 的 例子, 我 没 测过 。 应该 不会 “逻辑不正确”吧
重新研究了一下函数原型,你是对的,我还以为vprintf还是使用变参数,我理解错了
worldy 2014-01-19
  • 打赏
  • 举报
回复
引用 1 楼 masterz 的回复:
vsprintf?
引用 2 楼 schlafenhamster 的回复:
是不是这样的: static void PrintMessage( const char *Format, ... ) { va_list ArgList; char Buffer[256]; va_start(ArgList, Format); vsprintf(Buffer, Format, ArgList); va_end(ArgList); MESSAGEBOX(GetFocus(), Buffer, "Error", MB_OK); }
根据两位的提示,搞定
LPCTSTR Format(LPCTSTR pFormat,... )
{
	va_list ArgList;
	LPTSTR Buffer=new TCHAR[1024];

	va_start(ArgList, pFormat);

#ifdef _UNICODE
	vswprintf(Buffer, pFormat, ArgList);
#else
	vsprintf(Buffer, pFormat, ArgList);
#endif
	va_end(ArgList);
	return Buffer;
}
schlafenhamster 2014-01-19
  • 打赏
  • 举报
回复
“逻辑应该不正确”? 这是 MSDN 中 的 例子, 我 没 测过 。 应该 不会 “逻辑不正确”吧
worldy 2014-01-19
  • 打赏
  • 举报
回复
引用 3 楼 VisualEleven 的回复:
#define DBGPRINT(lpszFmt, ...) \
	TCHAR szText[1024] = {0}; \
	StringCchPrintf(szText, _countof(szText), lpszFmt, __VA_ARGS__);	\
	OutputDebugString(szText);
__VA_ARGS__这个是什么呢?
worldy 2014-01-19
  • 打赏
  • 举报
回复
引用 2 楼 schlafenhamster 的回复:
是不是这样的: static void PrintMessage( const char *Format, ... ) { va_list ArgList; char Buffer[256]; va_start(ArgList, Format); vsprintf(Buffer, Format, ArgList); va_end(ArgList); MESSAGEBOX(GetFocus(), Buffer, "Error", MB_OK); }
逻辑应该不正确,va_start获取了参数地址到ArgList,然后将该值传人Xprintf,Xprintf解析输出的应该是ArgList的值(即函数PrintMessage参数表的地址)
Eleven 2014-01-19
  • 打赏
  • 举报
回复
#define DBGPRINT(lpszFmt, ...) \
	TCHAR szText[1024] = {0}; \
	StringCchPrintf(szText, _countof(szText), lpszFmt, __VA_ARGS__);	\
	OutputDebugString(szText);
schlafenhamster 2014-01-19
  • 打赏
  • 举报
回复
是不是这样的: static void PrintMessage( const char *Format, ... ) { va_list ArgList; char Buffer[256]; va_start(ArgList, Format); vsprintf(Buffer, Format, ArgList); va_end(ArgList); MESSAGEBOX(GetFocus(), Buffer, "Error", MB_OK); }
masterz 2014-01-19
  • 打赏
  • 举报
回复

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧