【问题标题】:Matching 2 strings against each other in C?在C中将2个字符串相互匹配?
【发布时间】:2019-08-01 06:00:23
【问题描述】:

由于某种原因,它永远不会进入这个循环,即使 wordSave 与 cacheList[0].fileName 是完全相同的字符串

if (fileNameInCache(wordSave) != -1)
{
    printf("File found in cache.\n");
    n = write(sock, cacheList[fileNameInCache(wordSave)].fileContent, 4096);
    return 0;
}

这是检查文件名缓存的方法:

int fileNameInCache(char* name)
    {
    for (int i = 0; i < 256; i ++)
    {
        if (cacheList[i].fileName == name)
        {
            return i;
        }
    }
    return -1;
}

cacheList 是一个结构数组,其中 fileName 也是一个 char*。

知道为什么它从不进入这个循环吗?

【问题讨论】:

    标签: c string sockets char webserver


    【解决方案1】:
    if (strcmp(chacheList[i].fileName, name) == 0)
    {
        //the strings are "equal"
        return i;
    }
    

    还要在文件顶部添加#include &lt;string.h&gt;

    strcmp 参考。

    阅读 cstrings 也是一个好主意!它们被解释为char*s,基本上是指向“字符串”的第一个字符的指针,并按顺序存储其他字符,直到空字符('\0')表示字符串结束。

    This 也是您正在使用的一个很好的资源!

    【讨论】:

    • 在我为名称分配内存后工作得很好!谢谢!
    【解决方案2】:

    在 C 语言中,您使用的是指向字符串的内存指针。您的 cacheList[i].fileName 是与您的 name 变量不同的指针。当您执行cacheList[i].fileName == name 时,您实际上比较的是字符串的地址,而不是字符串的内容。相反,您应该使用 strcmp(chacheList[i].fileName, name) 来比较 C 中的字符串。您可以在此处找到更多信息:http://www.cplusplus.com/reference/cstring/strcmp/

    另外,别忘了#include &lt;string.h&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      • 1970-01-01
      • 2011-01-07
      相关资源
      最近更新 更多