如何避免clang-tidy误报readability-redundant-string-cstr?
解决clang-tidy误报冗余
c_str()调用的方案 你的代码里,std::string(buf,sizeof buf).c_str()的意图是把固定大小缓冲区中从开头到第一个空字符的部分转成std::string,让owner.size()等于strnlen(buf,4)的结果,但clang-tidy无法识别这个特殊意图,所以误报了冗余调用。可以用以下几种方案解决:
直接构造目标string(推荐):
直接用strnlen计算有效长度,构造std::string时指定这个长度,代码更清晰,也不会触发警告:std::string owner(buf, strnlen(buf, sizeof buf));这样
owner的大小就是缓冲区中第一个空字符前的字节数,完全符合你的需求。添加clang-tidy抑制注释:
如果不想修改代码逻辑,就在触发警告的行末尾添加抑制注释,告诉clang-tidy跳过这个检查:std::string owner = std::string(buf,sizeof buf).c_str(); // NOLINT(readability-redundant-string-cstr)显式截断字符串:
先构造包含整个缓冲区的临时string,再显式截断到第一个空字符的位置,意图明确,也不会触发警告:std::string temp(buf, sizeof buf); std::string owner = temp.substr(0, temp.find('\0'));
内容的提问来源于stack exchange,提问作者malat
相关产品推荐
相关产品推荐

