c++ - C++ 警告数组下标的类型为“char”
问题描述
我需要一些有关抛出“警告数组下标的类型为 'char' [-Wchar-subscripts]”消息的代码的帮助。
有问题的代码是: -
static
const long hextable[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 10-19
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 30-39
-1, -1, -1, -1, -1, -1, -1, -1, 0, 1,
2, 3, 4, 5, 6, 7, 8, 9, -1, -1, // 50-59
-1, -1, -1, -1, -1, 10, 11, 12, 13, 14,
15, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 70-79
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 10, 11, 12, // 90-99
13, 14, 15, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 110-109
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 130-139
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 150-159
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 170-179
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 190-199
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 210-219
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 230-239
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1
};
long hex2long(const char* hexString)
{
long ret = 0;
while (*hexString && ret >= 0)
{
ret = (ret << 4) | hextable[*hexString++];
}
return ret;
}
现在看来,这条线ret = (ret << 4) | hextable[*hexString++];
有问题。
我希望有人可以帮助我重新构建此代码以防止错误。
解决方案
更改const char*
为const unsigned char*
。
来自 GCC 警告:
-Wchar-subscripts 如果数组下标的类型为 char,则发出警告。这是错误的常见原因,因为程序员经常忘记这种类型是在某些机器上签名的。此警告由 -Wall 启用。
编译器不希望您对数组使用负索引,因此它会引发警告,让您知道这个潜在问题。
推荐阅读
- php - php artisan migrate 错误导致无法连接到数据库
- java - 如何从基于斜杠的分区中排除单个字符表达式?
- flutter - 如何从目录中导入所有 Dart 文件?
- mysql - 如何优化这个mysql程序代码
- kendo-ui - 剑道网格自动调整大小问题
- python - Python字符串乘法与“is”比较不一致
- c++ - 如何转换 CGAL 曲面网格顶点?
- java - 如何在 mysql 中添加整数和 Varchar(20) 并存储为 Varchar(20)
- python - PayPal Webhook 请求格式
- vue.js - 有没有办法在 Gridsome 的布局中引用 MetaInfo?