我正在用简单的练习教别人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/