c++ - libxml2 错误处理

标签 c++ c libxml2

我正在用 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/

相关文章:

c++ - 逐行读取输入并转换为 vector 并打印

C简单算法错误

c++ - SDL 导致 Undefined symbols : "_main", referenced from : start in crt1. 10.5.o

c++ - 在 C++ 中使用 Atan2

c++ - 是否有可能创建一个可以按值返回的内存高效的类似 VLA 的类型?

c - wait() 和 exit() 调用的错误输出

c - 如何用C检查闪存设备的坏扇区?

stream - 如何使用libxml2解析来自GInputStream(GLibGIO/GVFS)的数据?

c - 如何通过 libcurl 传输从 libxml2 读取的字符串?

perl - 如何使用Perl的XML::LibXML提取标记中的属性?