【问题标题】:Why are both conditions wrong?为什么两个条件都错了?
【发布时间】:2022-01-09 09:56:13
【问题描述】:

我的代码有问题,这两个条件不成立。事实上,我有 Python 背景,它们似乎很适合我。我希望任何人都可以帮助我解决这个问题。 感谢您的宝贵时间!

    char cArray[12] = "Hello World";

    char* pcVal = &cArray[2];

    if (cArray[2] == "l"){}

    if ((*pcVal) == "l"){}

【问题讨论】:

  • 注意:C 程序员通常写char *pcVal 而不是char* pcVal。当您编写类似char* aptr, bptr; 的内容时,这一点变得很重要(其中bptr 旨在成为指向char 的指针,但实际上被声明为char,因为星号绑定到aptr 而不是char)。跨度>
  • 如果你启用编译器警告,编译器会因为你比较不兼容的类型而对你大喊大叫。
  • @Cheatah 是的,尽管 C 语言的新手并不太了解警告。
  • 无论如何,关键是 Python 确实没有任何与 char 等价的东西。相反,它只是有一个 1 字符的字符串,当然 is 可以与另一个字符串相比较,而 C 有一个真正的 char 类型,它不能与 char 数组(又名字符串)相比较。当然,Python 也支持多种字符串引用类型(单、双、三)。
  • @jarmod 这就是我提到它的原因,因为老实说,没有人应该在没有这些警告的情况下进行编译,除非他们确切地知道自己在做什么。

标签: c pointers


【解决方案1】:

您正在将字符与字符串文字进行比较。

你需要使用'l'

char cArray[12] = "Hello World";

char* pcVal = &cArray[2];

if (cArray[2] == 'l'){}

if ((*pcVal) == 'l'){}

【讨论】:

  • 不知道 " 和 ' 有区别。
  • 是的——有很大的不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多