본문 바로가기

감탄과 탄식 그 사이/. 어쩌다 마주친 그대 오류에 내 마음을 빼앗겨 버렸네

C++ 문자열 비교시 == 연산자는 왜 안될까

열혈 C++ 프로그래밍 중 오류에 맞닥뜨렸다

 

쾅점수 2.5개 정도 되겠다

 


문제

 

일단 내가 썼던 코드는 이렇다

bool IsExistId(int ID, string name) {
	bool exist = false;

	for (int i = 0; i < 10; i++) {
		if (client[i].account_ID == ID) { // Account_ID 확인
        // ----------------------문제 구간------------------------------
			if (client[i].name == name) { // name 확인
        // ----------------------문제 구간------------------------------
				exist = true;
				cout << "확인 완료되었습니다\n\n";
				break;
			}
		}
	}
	return exist;
}

아이디가 존재하는지를 확인하는 함수를 만들었는데

자꾸 오류가 나길래 프로시저 단위로 한 줄씩 디버깅을 해봤는데

문제의 저 구간이 false 처리 되면서 그냥 넘어가고 있었다

분명 디버깅시에 확인되는 왼쪽 변수와 오른쪽 변수의 값은 동일했다

근데 왜 안될까?

 

문제는 바로 char* 자료형에 있다

문자열은 변수로 받아서 사용할 때에 char*로 받아서 사용하게 되면서

char* == char * 라고 써놓고 보면 컴파일러는 무엇을 비교할 것 같은가?

컴파일러는 char * 의 주소를 비교하게 된다

그렇기 때문에 문자열 값이 같아도 주소가 다르기 때문에 false로 넘어갈 수밖에 없는 것이다

 


해결책

 

strcmp함수를 통하여 문자열 비교함수를 사용하거나

 

char* 자료형에서 string 자료형으로 바꿔주게 되면

==연산자도 사용이 가능하다고 한다

char* -> string 시 == 연산자 사용 가능은

https://choryeonworkshop.tistory.com/119 이 블로그를 참조하였다!

 

 

이 글이 도움이 되는 사람이 있었으면 좋겠습니다!