所以我想要if语句:if (foo == ("bar" | "barbar"))
。我认为这是按位OR运算符,但我不确定。无论如何,这不起作用。关于我做错了什么想法?
答案 0 :(得分:2)
正如@cnicutar所说,没有为字符串文字定义按位OR运算符|
。
在我看来,如果foo等于“bar”或“barbar”,你就会尝试执行代码。这个将(注意这不起作用)看起来像这样(使用标准的布尔OR运算符,||
):
if ((foo == "bar") || (foo == "barbar"))
这不起作用(它会编译,但可能不会按你的意图行事),因为“bar”和“barbar”(我猜foo也是)是字符指针,而这个if语句会比较ADDRESSES这些字符串。你要做的是:
if ((strcmp(foo, "bar") == 0) || (strcmp(foo, "barbar") == 0))
请注意,您必须检查strcmp()的结果是否为0,因为这表示相等。
答案 1 :(得分:1)
无论如何,这不起作用。关于我做错了什么想法?
没有为字符串文字定义按位或运算符,因此在该上下文中使用它是没有意义的。
答案 2 :(得分:1)
如果您想比较字符串,则需要使用strcmp()
(manpage):
if (strcmp(foo, "bar") == 0 ||
strcmp(foo, "barber") == 0)
{
...
}
答案 3 :(得分:0)
逐位OR运算符对ORed值中的各个位执行OR运算。
实施例: 0b10111001 | 0b01101101 == 0b11111101
uint8_t a = 0xF0;
uint8_t b = 0x0F;
uint8_t c = a | b; // This is 0xFF
在文字的情况下,OR运算符操作的值是它们的地址,因此不会影响代码的意图。
正如之前的答案中所述,您应该使用strcmp
库中的strncmp
或string.h
函数来比较字符串。