目录
1、muduo::string和std::string之间的转换
引言
今天用muduo网络库写项目时出现下图所示bug,记录一下:
1、muduo::string和std::string之间的转换
muduo::string是muduo网络库中定义的字符串类型,它并不是标准库中的std::string类型,因此不能直接转换。如果需要将muduo::string转换为std::string,可以通过以下方式进行:
1、使用muduo提供的成员函数c_str()获取muduo::string对象的底层字符数组指针,然后将其作为参数传递给std::string的构造函数,实现两者之间的转换,示例如下:
muduo::string muduoStr("Hello, world!");
std::string stdStr(muduoStr.c_str(), muduoStr.size());
2、使用字符串流stringstream进行转换,示例如下:
#include <sstream>
muduo::string muduoStr("Hello, world!");
std::stringstream ss;
ss << muduoStr.c_str();
std::string stdStr = ss.str();
注意:无论哪种方式,都需要注意字符串中是否包含'\0'字符,因为muduo::string允许储存'\0'字符,但std::string默认把'\0'看成字符串结尾符,因此在转换过程中可能会出现问题。
2、默认将部分警告信息视为错误
在CMakeLists.txt文件中没有设置-Werror选项,但是在编译的时候将部分警告信息视为错误(cc1plus: some warnings being treated as errors),查了网上的解决方法:
1、去CMakeLists.txt或者makefile文件中去将-Werror选项取消。
2、设置-Wno-error选项,还可以尝试在编译命令中加上-v选项,以查看g++实际使用的编译选项。
g++ -Wall -Wno-error -v -c main.cpp
但是我的CMakeLists.txt里面并没有设置-Werror选项,所以方法1用不了。然后方法2,我显式设置了-Wno-error选项,但是编译结果并没有变化,同时由于我的文件比较多,所以并没有去直接使用g++ -v去验证。
最后我的解决办法是:使用C++11的四种类型转换去替换了代码中的C风格的类型转换。
static_cast:conversion to 'uint16_t' from 'int'; conversion to 'int' from 'size_t';
reinterpret_cast: int* --> char* ;