C - 没有strcmp的测试字符串等价

时间:2015-02-13 03:57:05

标签: c string equivalent

在我的大学任务中,我在我使用的图书馆中受到限制。我是C和指针的新手,想看看两个字符串(或者我应该说char' s)是否相等。

我的一部分想要遍历' char字符串的每个字符串'并测试等价,但后来又回来了如何测试等价(lol)。

感谢任何帮助。

编辑:我看到了这个:

  warning: result of comparison against a string literal is
  unspecified (use strncmp instead) [-Wstring-compare]

导致分段错误。我知道它与这段代码有关,因为我添加的是:

    if (example.name == "testName"){
        printf("here!\n");
    }

3 个答案:

答案 0 :(得分:2)

C中的字符串以空字符(0x00 or \0)终止。您应该逐个字符地循环比较两个字符串,直到达到任一字符串的null char。

如果字符不相等,则应该打破循环。

编辑:

回答您的问题编辑:

您应该使用指向两个字符串的两个字符指针,然后像

那样将它们拼凑起来
//loop start,loop till null for any one of the string is found

if(*ptr1 != *ptr2)
{
   //break loop
} 

ptr1++;ptr2++;

//end loop

if((*ptr1 == *ptr2) &&(*ptr1== 0x00))


{
      //strings are equal
}

答案 1 :(得分:2)

  

我的一部分想要循环遍历'char string'的每个字符并测试等价

这正是你需要做的。创建一个功能mystrcmp,其签名与regular strcmp相同,

int mystrcmp ( const char * str1, const char * str2 );

并编写自己的实现。

  

然后又回来了如何测试等效性。

当您逐个字符循环时,您将测试单个字符的等效性,而不是字符串。 C中的字符可以被视为数字:您可以使用==比较它们的相等性,检查哪些字符代码小于或大于使用<>,等等。 / p>

现在唯一要做的就是决定何时停止。您可以通过将每个字符串的当前字符与零进行比较来实现,即空终止符。

在使用之前,请不要忘记转发声明mystrcmp功能。

答案 2 :(得分:-1)

鉴于这是一项大学任务,你应该注意只是小整数的字符。您还应该注意C字符串是由二进制零(0x00)终止的连续内存缓冲区。

您还应该了解指针数学。您将学习如何缩短您必须编写的代码,同时学习关于C语言和计算机如何工作的非常有趣的内容。如果你选择低级编程的职业,它肯定会对你有帮助。