我正在用 C++ 围绕 libxml2 编写一个小的包装器,我正在尝试弄清楚如何处理错误。现在,假设我只想打印出来。这是我目前得到的:
我的错误处理函数:
void foo(void *ctx, const char *msg, ...) {
cout << msg << endl;
return;
}
初始化如下:
xmlGenericErrorFunc handler = (xmlGenericErrorFunc)foo;
initGenericErrorDefaultFunc(&handler);
但是,如果我解析错误的 XPath,我会得到以下输出:
%s
没有错误处理代码,我得到这个:
XPath error : Invalid expression //.@foobar ^
显然,最终我的错误处理将不仅仅是打印出错误消息(它将它记录到数据库或其他东西),但现在 - 我怎样才能得到那个错误字符串?
最佳答案
函数 foo() 参数列表末尾的三个点表示它接受可变数量的参数。为了能够打印那些你可以做这样的事情(未经测试):
#include <stdarg.h>
#define TMP_BUF_SIZE 256
void foo(void *ctx, const char *msg, ...) {
char string[TMP_BUF_SIZE];
va_list arg_ptr;
va_start(arg_ptr, msg);
vsnprintf(string, TMP_BUF_SIZE, msg, arg_ptr);
va_end(arg_ptr);
cout << string << endl;
return;
}
关于c++ - libxml2 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1679515/