字符串比较逻辑错误

时间:2015-07-08 18:52:58

标签: c string malloc

这个程序是比较字符串,但我不明白为什么每次都返回相同的c值。任何人都可以帮我理解这个? 谢谢。

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

2 个答案:

答案 0 :(得分:1)

我认为意图是函数返回
1匹配
错误匹配 0
c的值设置为1作为字符串相等的指示符,并在mn中的任何一个为空时返回。 (如果相等,则两者都为空)
如果字符串不相等,则返回c作为初始化 - > 0

以下版本 执行此操作。

将此版本与原始版本进行比较以获得建议的更改:

1)您无需为int c;分配内存,而是将其隐式创建为 auto
2)您可以在同一行初始化:int c = 0;
3)不要在int c块中重新创建if(...){...} 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=='\0') //5, 4
        {
            c = 1;//3
            break;
        }
        else
        {
           n++;
           m++;
        }
    }
    printf("%d \n",c);
    return(c);
}

答案 1 :(得分:0)

此功能将始终返回0.

您在顶部定义c并将其设置为0(覆盖malloc返回的值)。稍后,您在内部作用域中定义名为c的新变量,隐藏上一个声明。因此,外部c在设置为0后永远不会被修改。

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