开发记录:1、muduo::string和std::string之间的转换;2、默认将部分警告信息视为错误

文章讲述了在使用muduo网络库时遇到的问题,包括如何将muduo::string转换为std::string的两种方法,以及在没有-Werror选项的情况下,编译器仍将警告当作错误处理的解决策略,即使用C++11的类型转换替代C风格转换。
摘要由CSDN通过智能技术生成

目录

引言

1、muduo::string和std::string之间的转换

2、默认将部分警告信息视为错误


引言

        今天用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* ;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值