【发布时间】:2013-11-12 13:48:20
【问题描述】:
我的环境: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 我在这行printf(fmt, args); 中得到了一些像socket \\323\331/ did open 这样的乱码。
如果我这样称呼它printf("%s", c);,我会得到正确的结果。
我已经用谷歌搜索了几个日志函数和传递可变参数的函数的实现(this 或 this),看来我做的一切都是正确的。
你能告诉我我做错了什么吗?
【问题讨论】:
-
看起来你想要
vasprintf而不是asprintf。
标签: ios objective-c c printf objective-c++