카테고리 없음
[c언어] strcmp()함수 사용 시 주의할 점, c언어 if문 기준 값?
hatch
2023. 10. 30. 17:36
728x90
반응형
"개요"
1. strcmp() 함수 사용 시 원하는 출력값이 안나오는 것에 대해 c언어의 특징에서 문제를 찾았음.
2. 블로그 글을 쓰고 나니, 스스로의 착각이었다는 것을 깨닫게 되었음.
- 근본의 원인이 아니고, 타 언어와 다른 특징도 사실 표현이 다를 뿐이었음.
3. 해당 게시물은 strcmp() 함수의 유의점과 c언어가 다른 언어에 비해 어떤 특징을 가지는 지 알 수 있음.
4. 그러나 유익한 정보 글보다 그냥 흥미 글에 가까움을 유의하고 읽어주면 좋겠습니다.
1. strcmp()의 출력 결과로 인한 착각
문제
#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
void main() {
char ss[10] = "abcd";
char tt[10] = "abcde";
strcat(ss, "h");
printf("%s\n", ss);
if (strcmp(ss, tt)) {
printf("일치 : %s\n", ss);
}
else {
printf("불일치\n");
}
}
저렇게 작성하면 당연히 틀린 식이 된다.
➡️ strcmp() 함수는 문장이 동일할 때 0, 그렇지 않으면 1으로 반환된다.
일반적으로 작성하는 if 조건문을 보면, <조건식이 참(1)이면>의 구조를 갖는다.
위의 상황에서는 <동일하지 않을 때(1)>, 불일치가 나와야 하므로 출력문만 바꿔주면 된다.
if (strcmp(ss, tt)) {
printf("불일치 : %s\n", ss);
}
else {
printf("일치\n");
}
다른 해결 방법
1. 비교 연산자 활용
if (strcmp(ss, tt)==0) {
printf("일치 : %s\n", ss);
}
else {
printf("불일치\n");
}
위와 같이 (조건식의 결과값 == 0) 이라고 정확히 명시해주는 것이다.
그러면 오해없이 내가 원하는 출력값을 가질 수 있다. 이게 제일 좋은 방법같다.
2. NOT 활용(논리 연산자)
if (!strcmp(ss, tt)) {
printf("일치 : %s\n", ss);
}
else {
printf("불일치\n");
}
NOT 연산자를 작성하여 반대로 결과값이 나오도록 한다.
2. c언어에서 조건식의 기본값이 어떻게 되는지 찾아봤다.
💡 C 언어에서 if 조건문은 0일 때 거짓, 0이 아닐 때 참으로 동작합니다.
최근에 나온 언어는 true(참), false(거짓)과 같은 전용 자료형을 가지고 있지만
C 언어는 0을 거짓으로, 그 이외의 값을 모두 참으로 사용합니다.
사실 우리가 일상적으로 당연하게 쓰고 있다.
#include <stdio.h>
void main() {
if (0) {
printf("참입니다. \n");
}
else {
printf("거짓입니다.\n");
}
}
출력 : 거짓입니다.
자바나 다른 언어에서도 조건식이 참(1)이면, if문 안의 식이 출력되고 거짓(0)이면, else 문 안의 식이 출력된다.
C언어도 동일하다.
다만, C언어의 역사가 길고 길어서인지
boolean값이 아니라 0이 기준이라는 점이 흥미로운 포인트랄까...
착각이 삽질을 하게 만들었다. 하하.
2가지 깨달음을 얻었는데, 첫째는 오류의 본질을 정확히 알자이고
둘째는 충분히 고민을 하고 양질의 글을 쓰자^^ 이다.
최근들어 블로그를 활성화시켜야겠다는 어떠한 사명감 때문에
새로 알게 되었거나, 앞으로도 헷갈릴 내용을 바로 기록해두었다.
시간이 걸리더라도 충분히 고민하고 작성했을 때
더 많은 이들에게 도움된다는 사실을 기억하고, 그를 위해 노력해야겠다.