gpt4 book ai didi

c - memcmp C 实现 - 任何与此有关的逻辑错误

转载 作者:行者123 更新时间:2023-11-30 19:53:07 25 4
gpt4 key购买 nike

memcmp C 实现 - 这个有任何逻辑错误吗?

我正在寻找 memcmp() 的实现,我找到了这个代码片段,但它清楚地标明该代码片段有 1 个逻辑错误。你能帮我找出逻辑错误吗?

基本上,我使用不同的输入针对 memcmp() 的 string.h 库实现测试了此代码,但预期输出始终与该函数的库版本相同。

这是代码片段:

#include <stdio.h>
#include <string.h>

int memcmp_test(const char *cs, const char *ct, size_t n)
{
size_t i;

for (i = 0; i < n; i++, cs++, ct++)
{
if (*cs < *ct)
{
return -1;
}
else if (*cs > *ct)
{
return 1;
}
else
{
return 0;
}
}
}



int main()
{
int ret_val = 20; //initialize with non-zero value

char *string1 = "china";
char *string2 = "korea";

ret_val = memcmp_test(string1,string2,5);

printf ("ret_val is = %d",ret_val);

getchar();
return 0;
}

我使用两个示例字符串运行程序,程序将在比较两个字符串的第一个字符后立即返回。在上述情况下 ret_val 为 -1。

上面的代码片段应该符合memcmp()的定义是:

‘C’库函数 memcmp 的定义是int memcmp(const char *cs, const char *ct, size_t n)

比较 cs 的前 n 个字符与 ct 的前 n 个字符。如果 cs < ct,则返回 < 0。如果 cs > ct,则返回 > 0。如果 cs == ct,则返回 0。

肯定有逻辑错误,你能帮我找出来吗?

最佳答案

正如现在所编写的,此代码将仅测试输入的第一个字节。需要将 else return 0 移出循环,将 return 0 留在末尾:

  for (i = 0; i < n; i++, cs++, ct++)
{
if (*cs < *ct)
{
return -1;
}
else if (*cs > *ct)
{
return 1;
}
}
return 0;
}

关于c - memcmp C 实现 - 任何与此有关的逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/811926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com