[编辑]插入的 NULL 在样本中终止
我有一个函数接收以 ava_list
结尾的 a NULL
。我将每个字符串连接到char*
被调用的joinedString
. 函数按预期工作,除非我joinedString
每次调用此函数时都会增加它的大小。我的意思是保留以前的字符串并加入新字符串。
示例:第一次调用:
ShowMsg(style1, "a", "s", "d", NULL);
产生的结果:“asd”
第二次调用:
ShowMsg(style1, "w", "w", "q", NULL);
产生的结果:“asdwwq”
这种行为很奇怪,因为每次调用此函数时joinedString
都会初始化。va_list 是否保存以前使用的值?我使用的是 C,而不是 C++,而且我知道,使用 std::string 会容易得多。
int ShowMsg(MSGBOXSTYLE msgStyle, char* str, ...)
{
char* title = "", *joinedString = "", *theArg = "";
wchar_t* convertedTitle = "", *convertedString = "";
va_list args;
theArg = str;
va_start( args, str );
while(theArg != NULL)
{
if(msgStyle == WARN)
{
title = theArg;
}
else
{
strcat( joinedString, theArg );
strcat( joinedString, "\n\r" );
}
theArg = va_arg(args, char*);
}
va_end(args);
...
convertedTitle = (wchar_t*)malloc((strlen(title)+1)*sizeof(wchar_t));
convertedString = (wchar_t*)malloc((strlen(joinedString)+1)*sizeof(wchar_t));
mbstowcs( convertedTitle, title, strlen(title)+1 );
mbstowcs( convertedString, joinedString, strlen(joinedString)+1 );
...
free(convertedTitle);
free(convertedString);
}