0

这是问题

我正在恢复 Xcode 5 中的一些旧代码(ARC 之前、Xcode 4、GDB),虽然一切都编译并开始正常,但在打印 C++ 字符串对象的内容时,调试器的输出日志出现问题。

#define DebugPrintf(args...) x_Printf(__FILE__,__LINE__,__PRETTY_FUNCTION__,args);

void x_Printf(const char *file, int lineNumber, const char *funcName, const char *format,...)
{
    va_list ap;

    va_start (ap, format);
    printf("%s (%s:%d)",funcName,file,lineNumber);
    printf(format,ap);
    va_end (ap);
}


void MyFunc() 
{
    string name;

    …

    DebugPrintf("Loaded entity %s\n",name.c_str());
}

结果是:

void MyFunc() (File.cpp:52)Loaded entity \373*
${\370\325\377\277:{\373*
Ģ\247\300\242\247`6*

然而,检查名称 C++ 字符串对象显示它清楚地包含“MainMenu”作为内容。

有谁知道发生了什么?

4

1 回答 1

2

你应该使用vprintf

void x_Printf(const char *file, int lineNumber, const char *funcName, const char *format,...)
{
    va_list ap;

    va_start (ap, format);
    printf("%s (%s:%d)",funcName,file,lineNumber);
    vprintf(format,ap); // <-- vprintf
    va_end (ap);
}
于 2013-11-13T20:58:28.863 回答