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

-2 c

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;
}
Run Code Online (Sandbox Code Playgroud)

我使用两个示例字符串运行程序,程序将在比较两个字符串的第一个字符后返回.在上述情况下,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.

肯定有LOGICAL错误,你能帮我找到吗?

Dan*_*lau 8

正如现在所写,这段代码只会测试输入的第一个字节.该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;
 } 
Run Code Online (Sandbox Code Playgroud)


Meh*_*ari 7

我想因为char签名是实现定义的,你可以进行比较unsigned:

int memcmp_test(const char *cs_in, const char *ct_in, size_t n)
{
  size_t i;  
  const unsigned char * cs = (const unsigned char*) cs_in;
  const unsigned char * ct = (const unsigned char*) ct_in;

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