ANSI C:无法使用strcmp工作

时间:2016-09-24 13:57:23

标签: c

我使用Pocket C ++ for ANSI C.我尝试让strcmp()在我的程序中运行:

#include <stdio.h>
#include <string.h>

int main ()
{
  char str1 = 'C';
  char str2[3] = {'A', 'B', 'C'};
  int ret;

  ret = strcmp(str1, str2[3]);

  if (ret == 0) {
      printf("The are equal");
  } else {
      printf("They are not equal");
  }

  return(0);
}

我收到了一个错误:

  

从'char'无效转换为'const char *'[-fpermissive]

以及其他错误。然后我尝试改变变量: char const * var = 'C';const char * var = 'C';

它仍然不起作用,我做错了什么?

2 个答案:

答案 0 :(得分:1)

  

我做错了什么?

您向strcmp()函数发送了错误的参数。 以及 访问数组越界

我认为你对strcmp()函数的作用有误解。它不比较两个字符,而是比较两个字符串(具有空终止字符的字符数组)。

如果您只想比较两个字符串,则不需要任何函数,只需使用==运算符:

ret = (str1 == str2[2]);

if (ret == 1) 
{
   printf("The are equal");
} 
else 
{
  printf("They are not equal");
}

现在,何时使用strcmp()功能?

当你想用这种方式比较两个(以空终止字符结尾的字符数组)字符串时使用它:

char str1[10] = { 'a', 'b', 'c', '\0'};
char str2[10] = "abc";    //here automatically null character is provided at the end
int ret;

ret = strcmp(str1 ,str2);

if (ret == 0) 
{
   printf("The are equal");
} 
else 
{
  printf("They are not equal");
}

答案 1 :(得分:0)

C语言中strcmp函数的语法为:

int strcmp(const char * s1,const char * s2);

参数或参数: s1 =要比较的数组。 s2 =要比较的数组。

Return Value------Remarks
1. 0--------------if both strings are identical (equal)
2. negative -------if the ASCII value of the first unmatched character is less than second.
3. positive integer---if the ASCII value of the first unmatched character is greater than second.

您正在将一个字符变量与一个字符数组进行比较。所以修改它。