C - 在没有 strcmp 的情况下测试字符串等价性

C - test string equivalence without strcmp

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

我的一部分想要循环遍历 'char string' 的每个字符并测试等价性,但后来它又回到了如何测试等价性(笑)。

感谢任何帮助。

编辑:我看到了这个:

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

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

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

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

如果字符不相等,应该中断循环。

编辑:

回答您的编辑问题:

你应该使用两个指向两个字符串的字符指针,然后将它们像

//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
}

Part of me wants to loop through every char of the 'char string' and test equivalence

这正是您需要做的。使用与 regular strcmp

相同的签名创建一个函数 mystrcmp
int mystrcmp ( const char * str1, const char * str2 );

并编写自己的实现。

but then it comes back how to test equivalence.

逐个字符循环时,测试的是单个字符的等价性,而不是字符串。 C 中的字符可以像数字一样对待:您可以使用 == 比较它们是否相等,使用 <> 检查哪些字符代码小于或大于,等等。

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

不要忘记在使用前转发声明您的 mystrcmp 函数。

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

您还应该了解指针数学。您将学习如何缩短必须编写的代码,同时学习一些真正有趣的有关 C 语言和计算机工作原理的知识。如果你选择底层编程的职业,对你肯定有帮助。