Помогите с функцией C printf - PullRequest
0 голосов
/ 15 мая 2011

Я пытаюсь дублировать NSLog, но без всех ненужных дат в начале.Я попробовал следующую функцию c (я сделал сам), но она не будет регистрировать любые другие значения, которые не являются NSStrings.Пожалуйста, не могли бы вы сказать мне, как я мог сделать это, чтобы он записывал любое значение?

static void echo(NSString *fmt, ...) {
    printf("<<<<<<<%s>>>>>>>", [fmt UTF8String]);
}

1 Ответ

1 голос
/ 15 мая 2011

Чтобы использовать переменные списки аргументов в C, вам нужно использовать несколько макросов, определенных в заголовочном файле stdarg.h, который поставляется вместе с вашим компилятором.

вот подробное объяснение того, как написать свой собственный printf

Если вы просто хотите передать аргументы реальному printf без дальнейших манипуляций, вы можете вместо этого использовать вариант printf vfprintf, но вам нужно отдельно расширить параметр fmt:

static void echo(NSString *fmt, ...)
{
    va_list args;
    NSString *logfmt = [NSString stringWithFormat: @"<<<<<<<%s>>>>>>>", [fmt UTF8String]];
    va_start (args, fmt);
    vfprintf( stdout, [logfmt UTF8String], args );
    va_end (args);
    [logfmt release];
}
...