【问题标题】:C18 Microchip compiler and strcmp functionC18 Microchip 编译器和 strcmp 函数
【发布时间】:2012-06-19 14:20:32
【问题描述】:

我想比较两个字符串:

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

char _newState[] = "AVAILABLE";

当我想与一个 const 字符串进行比较时,我放了一行:

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

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

【问题讨论】:

    标签: c string strcmp c18


    【解决方案1】:

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

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

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

    您不应该使用强制转换,因为它们所做的只是隐藏此类问题。如果您有类型不匹配,那么您应该使用该信息来确定正确的类型应该是什么以及您是否犯了错误。使用强制转换就像告诉编译器忽略你所做的,即使编译器认为它应该是一个警告/错误。

    【讨论】:

    • @user1466676:不客气。如果它对您的问题的回答令您满意,请记住接受答案。
    【解决方案2】:

    试试:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多