Компилятор микросхемы C18 и функция strcmp

Я хочу сравнить две строки:

Первая строка объявлена ​​выше моей основной:

char _newState[] = "AVAILABLE";

Когда я хочу сравнить с константной строкой, я помещаю строку:

if(strcmppgm2ram((const char *) "AVAILABLE", _newState ) == 0){
    code:
}

Функция никогда не возвращает ноль, каково решение и правильный тип преобразования? У strcmp такая же проблема!

2 ответа

Похоже, у вас есть параметры в неправильном порядке. В соответствии с руководством библиотеки C18 подпись для strcmppgm2ram является

signed char strcmppgm2ram(const char * str1, const rom char * str2 );

Таким образом, ваша константа strng должна быть второй строкой, а ваш массив символов должен быть первым параметром.

Вы не должны использовать приведения, поскольку все, что они делают, это скрывают подобные проблемы. Если у вас есть несоответствие типов, вы должны использовать эту информацию, чтобы определить, каким должен быть правильный тип и допустили ли вы ошибку. Использование приведения типа похоже на указание компилятору игнорировать то, что вы сделали, даже если компилятор считает, что это должно быть предупреждение / ошибка.

Пытаться:

const far rom char _newState[] = "AVAILABLE";

Для дальнейшего использования полезно не игнорировать предупреждения компилятора - они помогут вам.

Другие вопросы по тегам