字符串比较逻辑错误

String Comparison Logic Error

该程序用于比较字符串,但我不明白为什么它返回相同的 c 值 everytime.Can 谁能帮我理解一下? 谢谢。

 int func(char *n,char *m)
      {
           int c;
           c = (int)malloc(sizeof(int));
           c=0;
           while(*n == *m)
               {
                    if(*n=='[=10=]' && *m=='[=10=]')
                        {
                            int c=1;
                            break;
                        }
                    else
                        {
                           n++;
                           m++;
                        }
                  }
        printf("%d \n",c);
        return(c);
      }

这个函数总是return0.

您在顶部定义 c 并将其设置为 0(由 malloc 编辑的值 return 被覆盖)。稍后,您在内部范围内定义了一个名为 c 的新变量,隐藏了之前的声明。所以外层的c在设置为0后永远不会被修改。

int c=1; 更改为 c=1,这可能就是您要查找的内容。此外,这里不需要调用 malloc,因为它分配动态内存,而 c 是一个 int 本身,而不是指向一个的指针。

我相信意图是函数 returns
1 匹配
0 表示不匹配
c 的值设置为 1,表示字符串相等,并在 mn 之一为空时返回。 (如果相等,两者都将为空)
如果字符串不相等,则 c 返回为已初始化 -> 0

下面的版本就是这样做的。

将此版本与您的原始版本进行比较以了解建议的更改:

1) 您不需要为 int c; 分配内存,它被隐式创建为 auto.
2)你可以在同一行初始化:int c = 0;
3) 不要在 if(...){...}
中重新创建 int c 4) 如果 *m*n 为 NULL,你想退出。
5) 因为 while 保证 *m 和 *n 是相同的,所以不需要检查两者是否为 NULL。 (感谢@mch 评论)

int func(char *n,char *m)
{
    int c=0;//1,2,
    while(*n == *m)
    {
        if(*n=='[=10=]') //5, 4
        {
            c = 1;//3
            break;
        }
        else
        {
           n++;
           m++;
        }
    }
    printf("%d \n",c);
    return(c);
}