我有一个简单的参数列表。我只是想把它打印到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;
}
答案 0 :(得分:5)
当你没有传递循环时,你期望如何读取空指针来终止循环?将通话更改为:
printTest("hello", "hello2", "hello3", "hello 4", (char *)0);
答案 1 :(得分:4)
va_list列表不以NULL结尾。实际上,它没有提供有关有多少参数的任何信息。你的论据必须提供一些关于有多少参数的指示。例如,对于printf(),format参数指示要处理的其他参数的数量。
如果您需要列表以NULL结尾,则需要将NULL作为最后一个参数传递。