c使用va_list打印参数列表

时间:2011-06-15 05:26:42

标签: c printf variadic-functions

我有一个简单的参数列表。我只是想把它打印到stdout,但我在打印“结束”之前得到了有线输出。有谁知道空行和不可读字符来自哪里?

输出:

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 个答案:

答案 0 :(得分:5)

当你没有传递循环时,你期望如何读取空指针来终止循环?将通话更改为:

printTest("hello", "hello2", "hello3", "hello 4", (char *)0);

答案 1 :(得分:4)

va_list列表不以NULL结尾。实际上,它没有提供有关有多少参数的任何信息。你的论据必须提供一些关于有多少参数的指示。例如,对于printf(),format参数指示要处理的其他参数的数量。

如果您需要列表以NULL结尾,则需要将NULL作为最后一个参数传递。