C 在没有字符串库的情况下测试字符串相等性

C 在没有字符串库的情况下测试字符串相等性,c,string,c-strings,C,String,C Strings,我已经编写了代码,我想看看两个char*‘strings’是否相等。我在代码中编写了print语句来帮助我调试它 基本上,命令数组是:[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 == co

我已经编写了代码,我想看看两个char*‘strings’是否相等。我在代码中编写了print语句来帮助我调试它

基本上,命令数组是:[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;
    }
}

那么在第一种情况下,a应该等于a,对吗?为什么不在if语句中?

字符*表示指向字符串第一个字符的指针,因此通过测试cmd->name==commands[i],可以测试name是否与commands[i]具有相同的地址。要比较两个字符串,可以使用标准库(string.h)的strcmp函数,如果函数返回0,则两个字符串相等


编辑:如果不能使用字符串库,那么编写一个简单的循环。在循环过程中,如果在两个字符串之间发现不同的字符,则返回错误的值(通过示例0),如果可以转到字符串末尾而没有找到不同的字符,则返回真实值(通过示例1)

,因为无法使用字符串库,因此必须实现自己的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
}
int-myStrcmp(常量字符*str1,int-size1,常量字符*str2,int-size2)
{
int i=0;
如果(尺寸1!=尺寸2)
return-1//不同的字符串
对于(i=0;i

这里的诀窍是你必须知道字符串的大小。如果你不能使用字符串库,我想你也不能使用strlen()。

你在测试地址是否相同,而不是内容是否相同。使用
strcmp()
比较字符串的内容。我无法使用字符串library@user93110然后编写自己的strcmp类函数。无法使用标准库不会使指针比较用于比较字符串的内容。然后编写一个比较字符的循环,与strcmp类似。我非常怀疑您不能使用此库…@user93110我更新了代码,因此它只比较大小相同的字符串。此实现不能称为“strcmp”等价物,因为返回值不匹配。这里您只返回-1或0,而原始strcmp也可以根据字符串的字典顺序返回1。@SirDarius实际上它应该返回0,这取决于第一个字符串的不匹配字符是在第二个字符串(在字母表上)的字符之前还是之后。但这只是一个例子。他的问题需要对此函数进行更多调整。
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
}