prev up next   top/contents search

comp.lang.c FAQ 列表· 第 15.5 题

如何编写一个接受格式字符串和可变数量参数的函数,类似于printf,并将它们传递给printf来完成大部分工作?


使用vprintf, 但没有vsprintf。这些例程与其对应的printf, fprintf,而sprintf类似,但它们不接受可变长度参数列表,而是接受一个单一的va_list指针,会发生什么。

例如,下面是一个函数(来自第 15.5 题)的一个版本,使用了函数,该函数打印一条错误消息,前面加上字符串“error: ”,并在末尾加上换行符

#include <stdio.h>
#include <stdarg.h>

void error(const char *fmt, ...)
{
	va_list argp;
	fprintf(stderr, "error: ");
	va_start(argp, fmt);
	vfprintf(stderr, fmt, argp);
	va_end(argp);
	fprintf(stderr, "\n");
}

另请参阅第 15.7 题。

参考文献:K&R2 第 8.3 节第 174 页,第 B1.2 节第 245 页
ISO 第 7.9.6.7、7.9.6.8、7.9.6.9 节
H&S 第 15.12 节第 379-80 页
PCS 第 11 节第 186-7 页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管