#c #pointers #boolean #warnings #hashtable
Вопрос:
Я продолжаю получать это предупреждение в своей компиляции следующего кода, в котором говорится, что «присвоение» _Bool «из» int «делает указатель из целого числа без приведения «в» *result = true;
«, и я понятия не имею, что это значит. Как я могу решить эту проблему? Он проходит все мои тесты.
char *hash_table_lookup(hash_table_t *ht, int key, bool **result)
{
/// Find the previous entry for key
entry_t *tmp = find_previous_entry_for_key(amp;ht->buckets[key % No_Buckets], key);
entry_t *next = tmp->next;
if (next amp;amp; next->value)
{
*result = true;
return (next->value);
}
else
{
*result = false;
}
}
Он тестируется следующим образом
void test_lookup1()
{
hash_table_t *ht = hash_table_create();
char *valtest = "a";
int keytest = 12;
hash_table_insert(ht, keytest, valtest);
bool *resu<
hash_table_lookup(ht, keytest, amp;result);
CU_ASSERT_TRUE(result);
hash_table_destroy(ht);
}
Комментарии:
1. Ваш
result
аргумент-это двойной указатель (bool **result
), так*result
же как и указатель (bool*
). Вы пытаетесь присвоитьfalse
илиtrue
(оба целых типа в C, если вы используете<stdbool.h>
заголовок) этому указателю. Для формального/более полного ответа (включая исправление) нам нужно будет увидеть больше кода, например, что вы делаете сresult
аргументом и что вы передаете в качестве этого аргумента.2.
result
является указателем на указатель. Когда вы разыменовываете его с*result
помощью, вы все равно получаете указатель наbool
, которому вы присваиваете целое число. Почемуresult
ему нужно иметь типbool **
?3. На данный момент мое «лучшее предположение» состояло бы в том, что эти два
**
— опечатка … но это только предположение.4. Почему эта
result
переменная должна быть указателем? Конечно, вы хотите получить прямоеbool
возвращаемое значение в качестве сигнала прохождения/сбоя и просто передатьbool* result
функцию?5. Пожалуйста, не публикуйте текстовые изображения. Вместо этого непосредственно скопируйте и вставьте свой текст (код, ввод и вывод) в вопрос.