2

所以我想要一个 if 语句就像:if (foo == ("bar" | "barbar")). 我认为这是按位或运算符,但我不确定。无论如何,这不起作用。关于我做错了什么的任何想法?

4

4 回答 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 运算符操作的值是它们的地址,因此无法按照您的代码似乎想要的方式工作。

如前面的答案所述,您应该使用库中的strcmporstrncmp函数string.h来比较字符串。

于 2012-09-16T18:27:26.710 回答