c распечатать список аргументов, используя va_list - PullRequest
3 голосов
/ 15 июня 2011

У меня есть простой список аргументов.И я просто хочу напечатать его на стандартный вывод, но я получаю проводной вывод перед печатью "конец".Кто-нибудь знает откуда взялась эта пустая строка и нечитаемые символы ??

output:

start
hello
hello2
hello3
hello 4

UH��AWAVAUATE1�S1�H��HH�E�
end



void printTest(const char* msg, ...) {

    va_list ap;
    int i;
    const char* curMsg=0;
    va_start(ap, msg);
    printf("start\n");

    for(curMsg= msg ;  curMsg!=0 ; curMsg = va_arg(ap,  const char*)){
        printf("%s\n", curMsg);
    }
    printf("end\n");
    va_end(ap);
}



int main(){

    printTest("hello", "hello2", "hello3", "hello 4");
    return 0;
}

Ответы [ 2 ]

5 голосов
/ 15 июня 2011

Как вы ожидаете прочитать нулевой указатель, чтобы завершить цикл, когда вы его не проходите? Измените вызов на:

printTest("hello", "hello2", "hello3", "hello 4", (char *)0);
4 голосов
/ 15 июня 2011

Список va_list не заканчивается на NULL. На самом деле, он не предоставляет никакой информации о том, сколько существует аргументов. Ваши аргументы должны обеспечить некоторое количество аргументов. Например, для printf () аргумент формата указывает число дополнительных аргументов для обработки.

Если вам нужно, чтобы список заканчивался NULL, вам нужно передать NULL в качестве последнего аргумента.

...