c如何将字符变量与字符串进行比较?

时间:2015-07-14 12:20:24

标签: c string char

以下代码在C中完全没问题,但在C ++中没有。在以下代码中if语句始终为false。 C如何将字符变量与字符串进行比较?

int main()
{
  char ch='a';
  if(ch=="a")
    printf("confusion");
  return 0;
}

3 个答案:

答案 0 :(得分:5)

  

以下代码在C

中完全没问题

不,完全没有。

在您的代码中

  if(ch=="a")

本质上是尝试将ch的值与字符串文字"a"的基址进行比较。这是意义和使用更少。

您想要的是使用单引号(')来表示char字面值,例如

  if(ch == 'a')

注1:

详细说明char文字的单引号与字符串文字的双引号之间的区别

对于char文字,C11,章节§6.4.4.4

  

整数字符常量是用单引号括起来的一个或多个多字节字符的序列,如'x'

string literal ,章节§6.4.5

  

Acharacter string literal是一个包含零个或多个多字节字符的序列   双引号,如"xyz"

注2:

即说明,main()的推荐签名为int main(void)

答案 1 :(得分:3)

我不会说这两种语言的代码都没问题。

'a'是一个单一字符。它实际上是一个小整数,其值为机器字符集中给定字符的值(几乎总是ASCII)。所以'a'的值为97,正如您可以通过运行

看到的那样
char c = 'a';
printf("%d\n", c);
另一方面,

"a"是一个字符串。它是一个以null字符结尾的字符数组。在C中,数组几乎总是通过指向它们的第一个元素的引用来引用,所以在这种情况下,字符串常量"a"就像一个指向两个字符'a'和终止{{1}的数组的指针}}。你可以通过运行

来看到
'\0'

这将打印

char *str = "a";
printf("%d %d\n", str[0], str[1]);

现在,我们不知道编译器会选择放置字符串的内存在哪里,所以我们不知道指针的值是什么,但可以说是安全的永远不会等于97.所以比较97 0 将始终为假。

当您需要比较一个字符和一个字符串时,您有两个选择。您可以将字符与字符串的第一个字符进行比较:

if(ch=="a")

或者你可以从角色构造一个字符串,并进行比较。在C中,可能如下所示:

if(c == str[0])
     printf("they are equal\n");
else printf("confusion\n");

这是C的答案.C ++中有一个不同的,更强大的字符串类型,所以这种语言会有所不同。

答案 2 :(得分:2)

'a'(字符)和"a"(包含两个字符a\0的字符串)之间存在差异。 ch=="a"比较将被评估为false,因为在此表达式"a"将转换为指向其第一个元素的指针,当然该地址不是字符而是十六进制数。

将其更改为

 if(ch=='a')