我写了代码,想要查看两个char *'strings'是否相等。我在代码中编写了打印语句,以帮助我调试它。

基本上,命令数组是:[a,b,null]

用户输入的cmd可以是任何东西,但是如果它是a,b或null,那么我们想进入if语句。

for (i = 0; i < 3; i++){
    printf("cmd.name = : %s\nCommand = %s\n", cmd->name, commands[i]);
    if (cmd->name == commands[i]){
        printf("inside if\n");
        valid = 1;
    }
}


其打印输出:

cmd.name = : a
Command = a
cmd.name = : a
Command = b
cmd.name = : a
Command = (null)


因此,首先,a应该等于权利吗?为什么它不在if语句中?

最佳答案

由于您不能使用字符串库,因此必须实现自己的strcmp函数。

char *作为一种类型,仅是一个指针,即它存储一个地址。然后,简单的“ ==”将比较地址,这不是您想要的地址。

一个简单的strcmp函数可以是:

int myStrcmp(const char *str1, int size1, const char *str2, int size2)
{
   int i = 0;

   if(size1 != size2)
      return -1 //different strings

   for(i = 0; i < size1; i++)
   {
       if(str1[i] != str2[i])
           return -1; //different strings
   }

   return 0; //same strings
}


这里的窍门是,您必须以某种方式知道什么是字符串大小。如果您不能使用字符串库,我想您也不能使用strlen()。

关于c - 在没有字符串库的情况下测试字符串是否相等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28504354/

10-11 22:13
查看更多