Что означает "Предупреждение: возвращение делает целое число из указателя без приведения" в C? - PullRequest
3 голосов
/ 25 апреля 2009

Я пишу простую функцию на C, цель которой состоит в том, чтобы взять 6-битное число, обработать первые 3 бита и на основе этого вернуть «r», «w» или «o». *

Однако, когда я компилирую, я получаю это предупреждение: «return делает целое число из указателя без приведения». Затем, когда я запускаю программу, я обнаруживаю, что функция возвращает странный символ, который определенно не входит в число трех, которые мне нужны.

Что здесь происходит? Заранее спасибо.

Вот моя функция:

char
readorwrite(int opcode)
{
    if (opcode >> 3 == 4) {
        return "r";
    } else if (opcode >> 3 == 5) {
        return "w";
    } else {
        return "o";
    }
}

Ответы [ 2 ]

18 голосов
/ 25 апреля 2009

Проблема в том, что «r», «w» и «o» являются строковыми константами, что означает, что их фактический тип - char [] или char *. Это означает, что ваша функция фактически возвращает указатель s на строку с нулевым символом в конце. Для одиночных символов вы должны использовать вместо 'r', 'w' и 'o'.

4 голосов
/ 25 апреля 2009

Вы возвращаете const char *, то есть указатель на место в памяти, где хранится строка «o», когда вы должны возвращать символ 'o'

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