Сравнение строк и указателей - PullRequest
0 голосов
/ 09 ноября 2019

Я все еще пытаюсь обернуть голову вокруг указателей и строк в C для класса, который я беру. В приведенном ниже примере g_reservations [] [] - глобальная переменная (я знаю, что она не идеальна, но я не могу это изменить).

ошибка: предупреждение C4047 'function': 'const char *' отличается по уровнямпереадресации от 'char' EconoAirBeta ... 299

* пассажир - это указатель, поэтому создать указатель на глобальный? Это кажется ненужным ...

как мне сделать эту работу? Я чувствую, что упускаю какую-то невероятно простую концепцию, которую мой мозг не может понять ...

unsigned int FindSeatWithPassenger(const char *passengerName)
{
    unsigned int seat = 0;
    for (seat = 0; seat < NUM_SEATS; ++seat)
    {
        if ( strncmp(passengerName, g_reservations[seat][0], NAME_LENGTH) != 0) //error here with global variable
        {
            return seat;
            break;
        }
    }
    return '\0';
}

Глобальная декларация:

#define NAME_LENGTH 10
#define NAME_BUFFER_LENGTH ( NAME_LENGTH + 1 )
char g_reservations[NUM_SEATS][NAME_BUFFER_LENGTH];

1 Ответ

3 голосов
/ 09 ноября 2019

Неправильный тип

Так же, как говорит ошибка.

g_reservations[seat][0] - это char.

int strncmp(const char *s1, const char *s2, size_t n) ожидает char * для s2.

Использовать &g_reservations[seat][0] или просто g_reservations[seat]

strncmp(passengerName, g_reservations[seat], NAME_LENGTH)
...