所以我想要一个 if 语句就像:if (foo == ("bar" | "barbar"))
. 我认为这是按位或运算符,但我不确定。无论如何,这不起作用。关于我做错了什么的任何想法?
user1675027
问问题
93 次
4 回答
2
正如@cnicutar 所述,|
未为字符串文字定义按位或运算符。
在我看来,如果 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,因为这表示相等。
于 2012-09-16T18:18:44.840 回答
1
无论如何,这不起作用。关于我做错了什么的任何想法?
未为字符串文字定义按位或运算符,因此在该上下文中使用它是没有意义的。
于 2012-09-16T18:13:18.240 回答
1
如果你想比较你需要使用的字符串strcmp()
(manpage):
if (strcmp(foo, "bar") == 0 ||
strcmp(foo, "barber") == 0)
{
...
}
于 2012-09-16T18:15:54.970 回答
0
按位 OR 运算符对被 OR 运算的值中的各个位执行 OR 运算。
示例:0b10111001 | 0b01101101 == 0b11111101
uint8_t a = 0xF0;
uint8_t b = 0x0F;
uint8_t c = a | b; // This is 0xFF
在文字的情况下,由 OR 运算符操作的值是它们的地址,因此无法按照您的代码似乎想要的方式工作。
如前面的答案所述,您应该使用库中的strcmp
orstrncmp
函数string.h
来比较字符串。
于 2012-09-16T18:27:26.710 回答