首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinApi FormatMessage导致分段故障

WinApi FormatMessage导致分段故障
EN

Stack Overflow用户
提问于 2014-04-04 13:06:46
回答 1查看 240关注 0票数 0

我使用CodeBlocks和Mingw: g++版本是4.7.1

来自MSDN的示例(参见最后一个示例,就在“需求”部分之前):

代码语言:javascript
复制
// Formats a message string using the specified message and variable
// list of arguments.
LPWSTR GetFormattedMessage(LPWSTR pMessage, ...)
{
   LPWSTR pBuffer = NULL;

   va_list args = NULL;
   va_start(args, pMessage);

   FormatMessage(FORMAT_MESSAGE_FROM_STRING |
              FORMAT_MESSAGE_ALLOCATE_BUFFER,
              pMessage, 
              0,
              0,
              (LPWSTR)&pBuffer, 
              0, 
              &args);

   va_end(args);

   return pBuffer;
}

它在呼叫FormatMessage时发生分段故障。你知道为什么会发生这种情况吗?我该怎么解决呢?

我是这么称呼它的:

代码语言:javascript
复制
int x = 3, y = 5;
GetFormattedMessage(_T("%1 : %2"), x, y);

我使用FormatMessage是因为我不能在mingw上使用_stprintf函数,_stprintf是对swprintf和swprintf本身的定义,而swprintf本身并没有定义为修复其中的一些错误%)

EN

回答 1

Stack Overflow用户

发布于 2014-04-04 13:33:14

FormatMessage要求您在消息字符串中传递类型信息。如果你不这样做,它就假设你的参数是C风格的字符串。MSDN说:

默认情况下,将每个值视为指向以null结尾的字符串的指针。

由于您传递的是整数,而不是字符串,因此您的调用应该类似于:

代码语言:javascript
复制
GetFormattedMessage(_T("%1!d! : %2!d!"), x, y);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22854014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档