使用sprintf处理va_参数的C编程?
我正在尝试学习va_args是如何工作的,我想将args列表与im生成的函数中的格式字符串合并。我现在做这件事的方式只会让我感到不安。有没有一种方法可以让我避免编写大量的处理函数使用sprintf处理va_参数的C编程?,c,C,我正在尝试学习va_args是如何工作的,我想将args列表与im生成的函数中的格式字符串合并。我现在做这件事的方式只会让我感到不安。有没有一种方法可以让我避免编写大量的处理函数 va_start( listPointer, msg ); #ifdef DEBUG fprintf(stderr, msg, listPointer); #endif str = (char *)calloc(sizeof(MAX_LINE_SIZE), sizeof(char)); if(str == NULL){
va_start( listPointer, msg );
#ifdef DEBUG
fprintf(stderr, msg, listPointer);
#endif
str = (char *)calloc(sizeof(MAX_LINE_SIZE), sizeof(char));
if(str == NULL){
fprintf(stderr, "out of memory exception");
return;
}
snprintf(str, MAX_LINE_SIZE, listPointer);
printf("testing: %s\n", str);
ret = write(logger, str, strlen(str));
if(ret == -1){
fprintf(stderr,
"Could not write to file with error: %s\n",
strerror(errno));
fprintf(stderr, "Cannot continue with error logging");
}
va_end( listPointer );
使用or函数。它不是采用参数列表,而是采用va_列表作为其参数
你可以称之为:
vsnprintf(str, MAX_LINE_SIZE, listPointer);
使用or函数。它不是采用参数列表,而是采用va_列表作为其参数
你可以称之为:
vsnprintf(str, MAX_LINE_SIZE, listPointer);
成对编写变量参数函数:
void ellipsis_function(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
valist_function(fmt, args);
va_end(args);
}
void valist_function(const char *fmt, va_list args)
{
vfprintf(stderr, fmt, args);
}
第一个函数应该与我展示的非常接近;可能有额外的固定参数,可能还有一个要捕获的返回值,但除此之外,它真的很简单
第二个函数可以根据需要执行任何操作,使用
vsnprintf()
等将数据格式化为字符串。成对编写变量参数函数:
void ellipsis_function(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
valist_function(fmt, args);
va_end(args);
}
void valist_function(const char *fmt, va_list args)
{
vfprintf(stderr, fmt, args);
}
第一个函数应该与我展示的非常接近;可能有额外的固定参数,可能还有一个要捕获的返回值,但除此之外,它真的很简单
第二个函数可以根据需要执行任何操作,使用
vsnprintf()
等将数据格式化为字符串。欢迎使用堆栈溢出。请尽快阅读这一页。如果您提供了SSCCE(),它也将帮助您永无止境。我们可以猜测(但不必猜测)您在代码之前有void函数(const char*msg,…){va_list listPointer;
,或类似的内容。请至少提供完整的函数。您应该使用vsnprintf()
或v*printf()的其他成员之一
family,我相信。您对的调用与您认为的不一样。欢迎使用堆栈溢出。请尽快阅读该页面。如果您提供SSCCE(),它也会有帮助。我们可以猜测(但不必猜测)您有void函数(const char*msg,…){va_list listPointer;
在您的代码或类似代码之前。请至少提供完整的函数。您应该使用vsnprintf()
或v*printf()
家族的其他成员之一,我相信。您对的调用不会起到您认为它在起的作用。