C++ 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)时,两者都不起作用 然后我做了类似的事情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
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
)检查字符串本身?