这个程序是比较字符串,但我不明白为什么它每次都返回相同的 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 作为字符串相等的指示符,并在 m
或 n
之一为 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/