我的环境:Xcode5、iOS、Objective-C/Objective-C++ 混合。
我试图找出导致下一个问题的原因。我正在编写自己的日志记录功能:
int _me_log(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
char *c = va_arg(args, char *);
char *message = NULL;
printf(fmt, args);
int n = asprintf(&message, fmt, args);
if (n != -1 && message != NULL) {
//do something with 'message' like writing to file, etc.
UPDATE:
//we need to handle memory created for 'message' storage.
free(message);
}
va_end(args);
return n;
}
然后我这样称呼它:
_me_log("socket %s did open", "Socket: 0x1fd1c880");
而不是正确的输出,我在这一行socket Socket: 0x1fd1c880 did open
得到了一些像这样的乱码。socket \\323\331/ did open
printf(fmt, args);
如果我这样称呼它,printf("%s", c);
我会得到正确的结果。
我已经用谷歌搜索了几个日志函数和传递变量参数的函数的实现(this或this),似乎我做的一切都是正确的。
你能告诉我我做错了什么吗?