字符串比较逻辑错误
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,表示字符串相等,并在 m
或 n
之一为空时返回。 (如果相等,两者都将为空)
如果字符串不相等,则 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);
}
该程序用于比较字符串,但我不明白为什么它返回相同的 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,表示字符串相等,并在 m
或 n
之一为空时返回。 (如果相等,两者都将为空)
如果字符串不相等,则 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);
}