我想比较两个字符串:
第一个字符串声明在我的 main 之上:
char _newState[] = "AVAILABLE";
当我想与一个 const 字符串进行比较时,我放了一行:
if(strcmppgm2ram((const char *) "AVAILABLE", _newState ) == 0){
code:
}
该函数从不返回零,解决方案和正确的类型转换是什么? strcmp也是一样的问题!
最佳答案
看起来您的参数顺序错误。根据 C18 库手册,strcmppgm2ram
的签名是
signed char strcmppgm2ram(const char * str1, const rom char * str2 );
所以你的strng常量应该是第二个字符串,你的字符数组应该是第一个参数。
你不应该使用强制转换,因为他们所做的只是隐藏这样的问题。如果您有类型不匹配,那么您应该使用该信息来确定正确的类型应该是什么以及您是否犯了错误。使用强制转换就像告诉编译器忽略你所做的,即使编译器认为它应该是一个警告/错误。
关于C18 Microchip编译器和strcmp函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11102994/