C++ 如何格式化变量参数TCHAR

C++ 如何格式化变量参数TCHAR,c++,printf,variadic-functions,C++,Printf,Variadic Functions,所以这是一个很酷的方式来打印我的日志到控制台。。但是现在我想能够选择我把日志放在哪里。我决定将wcout重定向到文件或控制台。当我输出到控制台时,这非常容易,因为我只有 void LogWriter::WriteLog(LPCTSTR log, const char ending, LPTSTR args, ...) { TCHAR str[128] = {0}; int len = (sizeof(log)/sizeof(TCHAR)); len += sizeof(e

所以这是一个很酷的方式来打印我的日志到控制台。。但是现在我想能够选择我把日志放在哪里。我决定将wcout重定向到文件或控制台。当我输出到控制台时,这非常容易,因为我只有

void LogWriter::WriteLog(LPCTSTR log, const char ending, LPTSTR args, ...)
{
    TCHAR str[128] = {0};
    int len = (sizeof(log)/sizeof(TCHAR));
    len += sizeof(ending)/sizeof(char); //might switch ending to TCHAR..might have to

    _stprintf_s(str, len+4, "%s()%c", log, ending);
    myOutput.push(str);
    //used to output to console for testing
    //if (args != NULL)
    //{
    //    va_list argptr;
    //    va_start(argptr, args);
    //    vfprintf(stdout, args, argptr);
    //    va_end(argptr);
    //}
}

我该怎么做有什么想法吗?谢谢

您发布的
WriteLog
函数都有问题。在第一个示例中,
sizeof(log)
生成
char*
(或
wchar\u t*
)的大小,而不是字符串的长度。使用
strlen
(如果必须支持
TCHAR
,则使用
\u t*
等效项)确定字符串长度。如果
\u stprintf\u s
扩展到宽字符版本,尝试使用
%c
格式说明符编写
char
可能无法工作(它需要是
wchar\u t
)。在函数的第二个版本中,到处都是窄字符串,但您将这些字符串写入
wcout
,而不是
cout
;为什么?@Praetorian所以我不必同时支持cout和wcout。我宁愿只支持同时适用于窄和宽的wcout。我计划无论如何都要把所有东西移到广域上,以支持这个程序应该支持的UNICODE。然后用广域字符版本替换
TCHAR
\u t*
函数;也许问题会消失。
void LogWriter::WriteLog(const char* log, const char ending, char* args, ...)
{
    std::wcout << log << "(";
    if (args != NULL)
    {
        va_list argptr;
        va_start(argptr, args);
        vfprintf(stdout, args, argptr);
        va_end(argptr);
    }
    std::wcout << ")" << ending << std::endl;
}
#define WRITE_START LogWriter::WriteLog(__FUNCTION__, '+')
#define WRITE_STARTF(_smsg, ...) LogWriter::WriteLog(__FUNCTION__, '+', _smsg, __VA_ARGS__) 

//example of usage
void test1(LPCTSTR lpclDevClass, LPCTSTR lpclDevName)
{
    WRITE_STARTF(_T("*%s* %s"), lpclDevClass, lpclDevName);
}
void test2()
{
    WRITE_START;
}