我正在用简单的练习教别人C编程。
我无法使strcmp()函数正常工作。

#include <stdio.h>
#include <string.h>
#define MAX 20
int main()
{
  char s1[MAX], s2[MAX];
  printf("Enter s1: ");
  scanf("%s",s1);
  printf("Enter s2: ");
  scanf("%s",s2);
  printf("S1 is %s\n",s1);
  printf("S2 is %s\n",s2);
  // string concatenation
  strcat(s1,s2);
  printf("S1 is %s\n",s1);
  // string copy
  strcpy(s1,s2);
  printf("S1 is %s\n",s1);
  // find the length of the string
  int a = strlen(s1);
  printf ("Length of S1 is %d\n", a);
  int b = strlen(s2);
  printf ("Length of S2 is %d\n", b);
  // string comparison               <<----- This is where it does not work
  int c;
  c = strcmp(s1, s2);
  printf("C is %d\n",c);
  if (c==0)
    printf("S1 = S2\n");
  else if (c<0)
    printf("S1<S2\n");
  else
    printf("S1>S2\n");
  return 0;
}


上面的代码会编译(带有警告),但不会执行。它引发segmentation fault错误并退出。
我也使用了指针样式语法,但是在编译过程中出现了错误。

附带说明,我看到许多网站都使用gets() puts()。但是,在我的程序中使用它时,它告诉我上述功能的使用已被弃用。如何确定可以使用哪些功能以及在哪里寻找它们?

编辑
程序输出:

prasannarajaram @ ubuntu:〜/ Documents / programs / C $ ./string
输入s1:测试
输入s2:大小写
S1正在测试
S2是案例
S1是测试用例
S1是情况
S1的长度是4
S2的长度是4
C为0
S1 = S2


在这里,我开始添加*指针符号以尝试查看可行的方法。

最佳答案

只需删除行上的指针:

printf("S1 is %s\n",*s1);
printf("S2 is %s\n",*s2);


要这样:

printf("S1 is %s\n",s1);
printf("S2 is %s\n",s2);


要了解有关c中的指针的更多信息,互联网上有很多教程,例如:http://karwin.blogspot.com.br/2012/11/c-pointers-explained-really.html

要了解有关c和c ++函数的更多信息,可以联系其官方文档,请参见以下链接:http://en.cppreference.com/w/

编辑:
在这一行上,您正在执行strcat:

strcat(s1,s2)


因此s1的值为s1 + s2,但是在下一行中,您将s2复制到s1中。

strcpy(s1,s2)


之后,s1将具有与s2相同的值,因此s1现在等于s2。这就是为什么strcmp总是返回0的原因。您可以在输出中看到这种情况。

S1 is test      #S1 initialy
S2 is case      #S2 initialy
S1 is testcase  #S1 after strcat(s1,s2)
S1 is case      #S1 after strcpy(s1,s2)


如您所见,S1最终与S2具有相同的值。

这应该工作:)

关于c - C中的字符串比较给出段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37288961/

10-14 05:30