【发布时间】:2013-12-03 02:44:09
【问题描述】:
我一直在使用我在网上找到的一些 C 代码,这些代码在 Windows 7 上有带有代码块的编译器警告,因为我正在学习 C 并尝试理解代码作为学习过程的一部分,我决定查看警告并修复它们有一些足够简单,但是我修复的第一个块我想我理解,但如果有人能证实我的理解,将不胜感激,有问题的原始代码 sn-p 是
unsigned char buffer[MAX_PATH];
unsigned char text_to_send[MAX_PATH];
unsigned char digits[MAX_PATH];
// 如下使用数字警告示例
text_to_send[m] = strtol(digits, NULL, 16);
给出的警告是
警告:传递“strtol”参数 1 的指针目标在符号上不同 [-Wpointer-sign]|
附注 注意:预期为 'const char *' 但参数类型为 'unsigned char *'
警告和注释对我的理解是正确的,因为它自己使用的数字是指向数字 [0] 地址的常量指针。当我删除无符号声明并将它们保留为 char 类型时,编译器在使用这 3 个数组时不再发出警告。
我的问题是我看不出有理由使用 unsigned char digits[MAX_PATH] (或者对于给出类似错误的两个声明),但是我错过了什么,原作者知道我错过了什么吗?
现在的代码编译时没有警告并且工作起来看起来一样,任何输入都非常感谢。
【问题讨论】:
-
unsigned char text_to_send[MAX_PATH]; text_to_send[m] = strtol(digits, NULL, 16);那不发出警告吗? “无符号字符 = 长”? -
不,它没有给出错误,但我明白你的意思,我也会看看那个,它不可能是正确的。感谢您指出这一点。
标签: c windows gcc codeblocks