WinApi FormatMessage导致段错误

时间:2014-04-04 05:06:46

标签: c++ winapi segmentation-fault mingw codeblocks

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

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

// 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时会出现段错误。 你知道为什么会发生这种情况以及如何解决这个问题吗?

这就是我所说的:

int x = 3, y = 5;
GetFormattedMessage(_T("%1 : %2"), x, y);

我使用了FormatMessage,因为我不能在mingw上使用_stprintf函数,_stprintf是对swprintf的定义,并且swinstf itselft没有定义为修复某些错误%)

1 个答案:

答案 0 :(得分:3)

FormatMessage要求您传递消息字符串中的类型信息。如果您不认为您的参数是C样式字符串。 MSDN说:

  

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

当你传递的是整数而不是字符串时,你的调用应该是这样的:

GetFormattedMessage(_T("%1!d! : %2!d!"), x, y);