2013-07-04 4 views
-2

다음 코드에서 문자열은 동일하지만 "문자열이 다릅니다"라는 메시지가 출력됩니다.문자 배열이 같지만 같지 않습니다.

논리 란 무엇입니까? 도 strcmp()

#include <iostream> 
using namespace std; 

main(void) 
{ 
char str1[30]="India",str2[30]="India"; 
cout<<"str1 address :"<<str1<<endl; 
cout<<"str2 address :"<<str2<<endl; 

if(str1==str2) 
    cout<<"strings same"<<endl; 
else 

cout<<"strings are different"<<endl; 

} 

은 출력, 즉 은 "문자열이 다른"와 동일하다.

#include <iostream> 
#include <string.h> 
using namespace std; 

main(void) 
{ 
char str1[30]="India",str2[30]="India"; 
cout<<"str1 address :"<<str1<<endl; 
cout<<"str2 address :"<<str2<<endl; 

if(strcmp(str1,str2)) 
    cout<<"strings same"<<endl; 
else 
    cout<<"strings are different"<<endl; 

} 
+0

'strcmp()'은 문자열이 0이 아닌 경우 0을 반환하고 '0'은 false 조건이므로'if()'에'! '를 사용했기 때문에'0'을 반환합니다. 제 대답에 나와있는 문서 링크를 읽으십시오. 배울 노력을 기울이십시오. –

답변

1

주소가 서로 다릅니다. 당신은 그들의 포인터를 비교하고 있습니다. 데이터가 동일하며 strcmp()와 같은 것이 필요합니다.

str1은 첫 번째 배열의 첫 번째 바이트의 주소를 가리 킵니다. str2는 두 번째 배열의 첫 번째 바이트 주소를 가리 킵니다. 어떤 컴파일러 최적화에서만 동일합니다. (% 100이 아니며 복사/할당 작업 후에 실패 할 수 있습니다.)

+0

배열 **을 초기화하는 데 사용되는 경우 주소가 동일하지 않습니다. 컴파일러를 최적화하면'const char * p1 = "foo"; const char * p2 = "foo";'작동하지만 문자열이 두 개의 다른 ** 배열로 복사되면 작동하지 않습니다 ** –

+0

맞습니다. 편집 중. –

4

그런 C 문자열을 비교할 수 없기 때문에. std::string (이 코드는 C++이므로 사용해야합니다.) 문자 배열을 사용하는 경우 동일하지 않은 주소에 == 연산자를 사용하고 있는지 확실하지 않습니다. C 문자열을 비교하려면 strcmp을 사용하십시오.

편집은 씨 맥주가 언급 한 바와 같이, 당신은 std::string== 연산자를 사용하므로 귀하의 문자열을 변경 시도 할 수 있습니다 : 당신이 기본 주소를 비교하는 if(str1==str2)==를 사용하여 문자 배열을 비교함으로써

std::string str1 = "India", str2 = "India"; 
+3

예, std :: string에서'=='연산자를 사용할 수 있습니다. –

1

두 개의 다른 배열 (동일하지 않음)의 경우 if(!strcmp(str1, str2))을 사용하여 문자열을 비교해야합니다.

읽어 int strcmp (const char * str1, const char * str2);

복귀 문자열의 관계를 나타내는 정수 값을 반환
제로 값은 두 문자열이 동일한 것을 나타낸다.
0보다 큰 값은 일치하지 않는 첫 번째 문자가 str1보다 큰 값인 str2보다 큼을 나타냅니다. 그리고 0보다 작은 값은 반대를 나타냅니다.

+1

잡았어. 선생님! 고마워요! –

관련 문제