Моята среда: Xcode5, iOS, Objective-C/Objective-C++ mix.
Опитвам се да разбера какво причинява следващия проблем. Пиша собствена функция за регистриране:
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);
, получавам правилни резултати.
Търсих в Google няколко реализации (това или това ) от функции за регистриране и функции, които предават променливи параметри и изглежда, че правя всичко правилно.
Бихте ли ми предложили какво правя грешно?
vasprintf
вместоasprintf
. - person Holly   schedule 12.11.2013