열혈 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 이 블로그를 참조하였다!
이 글이 도움이 되는 사람이 있었으면 좋겠습니다!
'감탄과 탄식 그 사이 > . 어쩌다 마주친 그대 오류에 내 마음을 빼앗겨 버렸네' 카테고리의 다른 글
405 Method Not Allowed 오류 (0) | 2021.08.19 |
---|---|
Header name must be a valid HTTP token ["{"] 뭐야 이거 (2) | 2021.08.13 |
C++ 오류 2 (0) | 2021.07.29 |
C++ 오류 1 (0) | 2021.07.28 |
scanf_s 문자열 입력 오류 (0) | 2021.06.06 |