Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Log4cxx宏无法处理包含空字符的字符串_C++_Logging_Log4cxx - Fatal编程技术网

C++ Log4cxx宏无法处理包含空字符的字符串

C++ Log4cxx宏无法处理包含空字符的字符串,c++,logging,log4cxx,C++,Logging,Log4cxx,我正在开发客户机-服务器应用程序。我们有从服务器发送和查询数据的协议格式。 现在,我需要在日志文件中记录来自或到服务器的数据。 我使用的是最新版本的Log4cxx。 但是这个二进制数据也包含空字符 有一条信息是这样的: ab 40 01 00 00 ff f0 00 00 00 09 01 07 00 c0 a8 04 54 ae 首先我试着用char*pMsg然后我做了类似的事情 使用std字符串str(pMsg)时,两者都不起作用 然后我做了类似的事情 char chMsg[MAX_P

我正在开发客户机-服务器应用程序。我们有从服务器发送和查询数据的协议格式。 现在,我需要在日志文件中记录来自或到服务器的数据。 我使用的是最新版本的Log4cxx。 但是这个二进制数据也包含空字符

有一条信息是这样的:

ab 40 01 00 00 ff f0 00 00 00 09 01 07 00 c0 a8 04 54 ae

首先我试着用char*pMsg然后我做了类似的事情 使用std字符串str(pMsg)时,两者都不起作用

然后我做了类似的事情

   char chMsg[MAX_PATH];
   while(i<nBuffLen)
   {
    chMsg[i] = *(pMsgBuff+i);
    i++;
   }
charchmsg[MAX_PATH];

而(i注意,您没有适当地构建
std::string

直接调用
std::string(chMsg)
时,需要调用
strlen
来确定传递的C字符串的长度。不幸的是,在您的情况下,C字符串在C标准a系列字符中定义为以空字符结尾

但是,还有其他
std::string
构造函数:

  • std::string(char const*,size\t)
    可以精确计算缓冲区的长度
  • std::string(InputIt,InputIt)
    可与分隔缓冲区的两个指针一起使用
(更多信息请参见)


如果您使用其中任何一个,那么
std::string
将包含空字符,而不是在第一个字符处停止,因此应该正确打印。

数据存储在什么类型?
std::string
const char*
?您遗漏了最重要的细节。问题是LOG4CXX\u信息是如何显示的我想当LOG4CXX_信息遇到0('\0')时在缓冲区中,可能是字符串或任何它停止写入的内容。我也尝试了你的方法,它只打印前两个“是”,之后不打印。@Chris\u vr:它是否写入文件不应该相关,如果
字符串
构建良好,它应该完全打印出来。你试过在控制台上显示它吗(
std::cerr
)检查字符串本身?