2014-10-30 1 views
-2

C에서 strcmp() 함수는 두 문자열이 같으면 0을 반환합니다. 나는이 같은 코드를 제공,strcmp()는 부동 문자열 비교시 0을 반환합니다.

char str[10] = "hello"; 
if(strcmp(str,strrev(str))==0) 
{ 
printf("1"); 
} 
else 
printf("0"); 

이 1의 경우 상동 문자열을 인쇄해야하거나 회문이 아닌 경우는 0을 인쇄해야합니다. 그러나 주어진 문자열 "hello"가 회문이 아닐지라도 1을 출력합니다. 실수는 어디 있습니까?

+1

먼저 사용하려고하는 기능에 대한 설명서를 읽으십시오. strrev는 주어진 문자열을 되돌리고 새 문자열을 생성하지 않는 것 같습니다. 이야기의 끝. – zubergu

+1

"strcmp()는 불균등 한 문자열과 비교할 때 0을 반환합니다."라고 결론을 내리기보다는 40 년 이상 지속 된 strcmp()가 올바로 작동하고 있다고 생각하십시오. "왜 문자열'str'과'strrev (str)'이 같은지 물어보십시오. – chux

답변

1

strrev()은 표준 C 라이브러리 함수가 아닙니다. 귀하의strrev()

는 실제 문자열을 반전되어 str 후 변경된 문자열로 strcmp() 가고, 첫번째. 결과는 항상 동일합니다. 당신이 원하는 결과를 갖고 싶어

는 :

  1. 는 원래 문자열
  2. 의 복사본이 이전 복사본과 비교 strrev()
  3. 원래 문자열을 전달합니다.
6

strrev()은 무엇입니까? 이것은 표준 C 함수가 아닙니다.

내 가정은 생각했던 것처럼 작동하지 않는다는 것입니다. 즉, 문자열의 새로운 힙 사본을 생성하고 반환하지 않는다는 것입니다. 물론 이라면을 기대할 수 있습니다. 반환 된 포인터를 유지하지 않는 버그가 있으므로 free() 할 수 있습니다.

기본적으로 C 문자열은 높은 수준의 언어에서 문자열처럼 작동한다고 기대하는 것 같습니다. 실제로는 그렇지 않습니다.

관련 문제