gpt4 book ai didi

c++ - CPPCheck 在输出中打印无效字符

转载 作者:行者123 更新时间:2023-11-30 05:02:15 25 4
gpt4 key购买 nike

我正在对以下代码运行 cppcheck

bool  bsIsBigEndian( void )
{
return (((const int*)"\0\x1\x2\x3\x4\x5\x6\x7")[0] & 255) != 0;
}

使用下面的命令

cppcheck --template={file};{line};{severity};{message};{id} --enable=style,performance,portability file.cpp

输出

打印在 enter image description here

我尝试了 --platform 选项,但结果仍然相同。我怎样才能摆脱无效字符?

最佳答案

您的代码有 undefined behaviour .

您正在转换 const char *const int *这可能(并且将会,因为它是一个字符串常量,编译器可能不会打扰它对齐)有不同的对齐方式。您的代码可以这样修复。

bool bsIsBigEndian() {
const char *text = "\0\x1\x2\x3\x4\x5\x6\x7";
int value;
std::memcpy(&value, text, sizeof value);
return (value & 255) != 0;
}

memcpy忽略对齐问题,只要int 就是正确的是 8 个字节长或更小,在大多数平台上它是 4 个字节长。

也可以通过写const char text[] = {0, 1, 2, 3, 4, 5, 6, 7}; 来去掉字符串常量。相反。

关于c++ - CPPCheck 在输出中打印无效字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49975270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com