Log4cxx宏无法使用包含null字符的字符串
Log4cxx macro is not working with string contain null character
我正在开发客户端-服务器应用程序。我们有从服务器发送和查询数据的协议格式。现在我需要在日志文件中记录来自或到服务器的数据。我使用的是Log4cxx的最新版本。但是这个二进制数据也包含空字符。
有一条消息是这样的:
ab 40 01 00 00 00 ff f0 00 00 00 09 01 07 00 00 c0 a8 04 54 ae
首先我尝试了char*pMsg,然后我做了一些类似的事情使用std字符串str(pMsg)两者都不起作用。
然后我做了一些类似的事情
char chMsg[MAX_PATH];
while(i<nBuffLen)
{
chMsg[i] = *(pMsgBuff+i);
i++;
}
所有方法都失败了,结果是
- 它正确地打印了前三个字节,之后就没有了
- 对LOG4CXX_INFO的某个时间调用会使应用程序崩溃
我正在使用LOG4CXX_INFO宏来记录信息。
这似乎是由于第四个字段中的NULL字符造成的。我找到了这个链接,声称已经解决了这个问题,但我用LOG4CXX_INFO尝试了相同的代码,它正在崩溃。https://issues.apache.org/jira/browse/LOGCXX-162
如何解决这个问题?
std::string
。
当您直接调用std::string(chMsg)
时,会涉及一个strlen
调用来确定您传递的C字符串的长度。不幸的是,在您的情况下,根据的定义,C字符串在C标准中是以null字符结尾的一系列字符。
然而,还有其他std::string
构造函数:
std::string(char const*, size_t)
可用于精确缓冲区的长度- CCD_ 6可以与界定缓冲区的两个指针一起使用
(详见cplusplus.com)
如果使用其中任何一个,则std::string
将包含空字符,而不是在第一个字符处停止,因此应正确打印。
相关文章:
- 将 NULL 与 C 的字符* 字符串一起使用
- 如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
- 如何告诉字符串流忽略null终止字符
- 如何获取包含 NULL 字符的外壳代码字符串的长度
- 当使用反向循环逆转字符串时,null字符会发生什么
- NULL字符未出现在COUT中
- 将字符串指针与 NULL 以及 NULL 字符进行比较的目的
- 在std::字符串或字符数组中间包含NULL字符的UPDATE
- 打印超过 NULL 字符的内存内容
- 为什么编译器在每个字符串字面的C 的末端附加null字符
- 字符串长度函数w.r.t为null字符时的奇怪行为
- 在不使用c++中的库函数的情况下,计算不包括null字符的字符串长度
- 如何在c++中构造嵌入NULL字符的BSTR
- 如何在C++中将NULL字符嵌入字符串中
- 字符串中的null字符
- 为什么我不能在 C++ 中构造一个带有 NULL 字符* 的字符串?
- 加密数据中的Null字符
- Log4cxx宏无法使用包含null字符的字符串
- 为什么指向 NULL 字符的指针没有转换为 false
- 将字符串内带有 NULL 字符的字符串数据复制到字符数组