在C语言中,"Warning: return makes integer from pointer without a cast"是什么意思?

3
我正在用C语言编写一个简单的函数,其目的是获取一个6位数,找出前3位,并根据此返回"r"、"w"或"o"。
然而,当我编译时,我得到了这个警告:'return makes integer from pointer without a cast'。然后,当我运行程序时,我发现函数返回了一个奇怪的字符,绝对不是我想要的三个字符之一。
这是怎么回事?谢谢您提前帮助。
以下是我的函数:
char
readorwrite(int opcode)
{
    if (opcode >> 3 == 4) {
        return "r";
    } else if (opcode >> 3 == 5) {
        return "w";
    } else {
        return "o";
    }
}

3
Neil Butterworth曾指出,在现已删除的回答中,您应该非常谨慎地混合位运算符,如移位或AND或OR,以及比较,如相等。移位运算符的优先级确实高于比较运算符; 但是,即使我不是C语言的初学者,我也要查看优先级表。在进行位掩码和位移操作时会出现特定问题。如果将代码提交给我审核,我会要求在移位操作周围添加额外的括号,即使编译器将完全按照预期处理它。 - Jonathan Leffler
2个回答

18

问题在于 "r"、"w" 和 "o" 是字符串常量,这意味着它们的实际类型是 char[] 或 char*。这意味着您的函数实际上是返回一个指向以零结尾的字符串的指针。对于单个字符,您应该使用 'r'、'w' 和 'o'。


4

您应该返回一个字符 'o',而不是返回一个指向内存中字符串 "o" 的 const char * 指针。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接