Моя среда: 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 или это) функций и функций ведения журнала, которые передают переменные параметры и вроде все делаю правильно.
Не могли бы вы подсказать мне, что я делаю не так?
vasprintf
вместоasprintf
. - person Holly   schedule 12.11.2013