Компилятор микросхемы 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";
Для дальнейшего использования полезно не игнорировать предупреждения компилятора - они помогут вам.