正如标题所说,我必须用指针构建一个强化函数。该函数将检查第二个字符串是否出现在第一个字符串的末尾,如果出现,则返回1;如果没有,则返回0。这是我的代码,它没有编译,并且在assignment error中给出了一个非左值。有什么想法吗?
#include <stdio.h>
#define MAX 100
int strend (char *s1,char *s2);
int main()
{
char string1[MAX]="Check Mate";
char string2[MAX]="Mate";
printf("The Result is :\n");
printf("%d",strend(string1,string2));
return 0;
}
int strend (char *s1,char *s2)
{
for(;*s1!='\0';s1++)
{ for(;*s2!='\0' && *s1!='\0' && *s1==*s2;s1++,s2++)
;
}
if(*s1='\0' && *s2='\0')
return 1;
else
return 0;
}
最佳答案
编译器显示的错误表示您试图分配给不是LVALUE
的对象。简单地说,LVALUE
指的是可以出现在作业左侧的术语(实际上它比这复杂得多;)
您需要使用==
进行相等比较,而不是=
if (*s1 == '\0' && *s2 == '\0')
return 1;
else
return 0;
还要注意,编译器在
*s2 = '\0'
处显示了错误,并没有抱怨第一个赋值*s1 = '\0'
(即使它在逻辑上不符合您的程序要求)。换句话说,编译器不会仅使用以下语句来显示左值错误:
if (*s1 = '\0')
只有当你有一个
&& *s2 = '\0'
时,它才显示出错误。正如teppic在下面的注释中指出的那样,正是由于表达式的计算等价于
if(*s1 = ('\0' && *s2) = '\0')
(因为运算符的优先级),这使得编译器显示左值错误,因为表达式中不能有0 = 0
。关于c - 使用指针构建strend函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15327967/