正如标题所说,我必须用指针构建一个强化函数。该函数将检查第二个字符串是否出现在第一个字符串的末尾,如果出现,则返回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/

10-11 22:08
查看更多