这个程序是比较字符串,但我不明白为什么每次都返回相同的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);
}
答案 0 :(得分:1)
我认为意图是函数返回
1匹配
错误匹配 0
c
的值设置为1作为字符串相等的指示符,并在m
或n
中的任何一个为空时返回。 (如果相等,则两者都为空)
如果字符串不相等,则返回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>