2012-06-19 2 views
1
내가 두 문자열을 비교하려면

는 : C18 마이크로 칩 컴파일러와 strcmp와 기능

char _newState[] = "AVAILABLE"; 

나는 const를 문자열로 비교하려는

, 난 라인을 넣어 :

첫 번째 문자열은 주 내 위에 선언 :

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

이 함수는 절대로 0을 반환하지 않으며 솔루션과 올바른 형식 변환은 무엇입니까? strcmp가 동일한 문제입니다!

답변

2

시도 :

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

나중에 참조 할 수는 컴파일러 경고를 무시하지 않는 것이 좋습니다 - 그들은 당신이 도움이됩니다.

5

매개 변수의 순서가 잘못되어있는 것처럼 보입니다. C18 라이브러리 설명서에 따르면 strcmppgm2ram에 대한 서명은

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

그래서 당신의 strng 상수는 두 번째 문자열이어야하며 문자 배열이 첫 번째 매개 변수해야합니다.

캐스팅을 사용하면 안됩니다. 캐스팅을 사용하면 안됩니다. 유형 불일치가있는 경우 해당 정보를 사용하여 올바른 유형을 결정하고 실수를했는지 여부를 판별해야합니다. 캐스트를 사용하는 것은 컴파일러가 경고/오류라고 생각할지라도 컴파일러가 수행 한 작업을 무시하도록하는 것과 같습니다.

+0

답장을 보내 주셔서 감사합니다. 문제 해결됨! – user1466676

+0

@ user1466676 : 환영합니다. 귀하의 질문에 만족한다면 답변을 수락하는 것을 잊지 마십시오. – tinman

관련 문제