C18 Microchip编译器和strcmp功能

1 c string strcmp mplab-c18

我想比较两个字符串:

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

char _newState[] = "AVAILABLE";
Run Code Online (Sandbox Code Playgroud)

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

if(strcmppgm2ram((const char *) "AVAILABLE", _newState ) == 0){
    code:
}
Run Code Online (Sandbox Code Playgroud)

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

tin*_*man 6

看起来您的参数输入顺序错误.根据C18图书馆手册,签名strcmppgm2ram是

signed char strcmppgm2ram(const char * str1, const rom char * str2 );
Run Code Online (Sandbox Code Playgroud)

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

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