c - 字符串比较逻辑错误

标签 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);
      }

最佳答案

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

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

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

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

关于c - 字符串比较逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31301298/

相关文章:

字符数组到无符号短转换问题

c - 以下是什么意思?

c - 错误: expression must be a pointer to a complete object type

javascript - 函数调用中的字符串与函数中定义的字符串的处理方式不同 - 奇怪的错误

C API 设计 : what to do when malloc returns NULL?

使用 Dynamic Prog 的加泰罗尼亚数字

string - Delphi 汇编函数返回长字符串

用于在特定文件中搜索文本的 Linux 命令

C DMA - 使用带有malloced内存的括号

c - MPI_UNPACK 截断,缓冲区大小无效