Сопоставление 2 строк друг с другом в C? - PullRequest
0 голосов
/ 11 марта 2019

По какой-то причине он никогда не входит в этот цикл, даже если 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 *.

Есть идеи, почему он никогда не входит в этот цикл?

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

В Си вы работаете с указателями памяти на строки.Ваш cacheList[i].fileName - это другой указатель, чем ваша name переменная.Когда вы делаете cacheList[i].fileName == name, вы фактически сравниваете адреса ваших строк, а не содержимое ваших строк.Вместо этого вы должны использовать strcmp(chacheList[i].fileName, name) для сравнения строк в C. Вы можете найти больше информации здесь: http://www.cplusplus.com/reference/cstring/strcmp/

Кроме того, не забудьте #include <string.h>

0 голосов
/ 11 марта 2019
if (strcmp(chacheList[i].fileName, name) == 0)
{
    //the strings are "equal"
    return i;
}

Также добавьте #include <string.h> в начало вашего файла.

strcmp ссылка.

Чтение cstrings также является отличной идеей! Они интерпретируются как char* s, в основном это указатели на первый символ «строки», при этом последовательно сохраняются другие символы до тех пор, пока нулевой символ ('\0') не покажет конец строки.

Этот также является отличным ресурсом для того, с чем вы работаете!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...