Строки в C довольно хитры. Строки в C являются просто массивом. Так же, как массив int
с одним небольшим, но существенным отличием: они должны заканчиваться '\0'
.
Давайте посмотрим на эту часть вашего кода:
...
if(p->idf == x){
return p->value;
}
...
Согласно вашему коду, idf
- это массив char
. Точнее говоря, это указатель на первый элемент массива (так работают массивы в C). А как насчет x
? Это тот же тип - указатель на первый элемент другого массива.
Так что p->idf == x
делает сравнение адресов массивов. Если вы хотите сравнить со строками в C, у вас есть две функции: strcmp
и strncmp
.
Первая выполняет итерацию по массивам и сравнивает соответствующие значения, пока не достигнет \0
(конец строкового символа). Второй имеет один дополнительный аргумент, который сообщает функции, сколько сравнений он должен выполнить.
Все это может быть немного запутанным в начале, но идея указателей является очень мощной функцией, и это прямо сейчас, когда вы к этому привыкнете.
Если вы хотите узнать о строках в C, вам следует взглянуть здесь .