C18 Microchip编译器和strcmp功能

时间:2012-06-19 14:20:33

标签: c string strcmp c18

我想比较两个字符串:

第一个字符串在我的main上面声明:

char _newState[] = "AVAILABLE";

当我想与const字符串进行比较时,我把这行:

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

该函数永远不会返回零,什么是解决方案和正确的类型转换? strcmp也是同样的问题!

2 个答案:

答案 0 :(得分:6)

看起来您的参数输入顺序错误。根据C18库手册,strcmppgm2ram的签名是

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

所以你的strng常量应该是第二个字符串,你的字符数组应该是第一个参数。

你不应该使用强制转换,因为他们只是隐藏这样的问题。如果您的类型不匹配,那么您应该使用该信息来确定正确的类型应该是什么以及您是否犯了错误。使用强制转换就像告诉编译器忽略你已经完成的工作,即使编译器认为它应该是警告/错误。

答案 1 :(得分:2)

尝试:

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

为了将来参考,最好不要忽略编译器警告 - 它们可以帮助您。