반응형

많은 사람들이 아래와 같은 코드 문제를 해결하기 위해 이 글을 클릭했을 것이다.

분명히 변수 input에 love를 저장하고 if문을 사용하여 문자열 "love"를 비교하는 코드를 작성했는데 생각처럼 되지 않는다.

 

#include <stdio.h>
 
int main()
{
    char input[] = "love";
    
    if(input == "love"){
        printf("love");
    }else{
        printf("not love");
    }
    
    return 0;
}

 

그 이유는 == 연산자를 사용하여 문자열을 비교하는 것은 문자열을 비교하는 것이 아니라 배열 input과 문자열 love의 주소값을 비교하기 때문이다. 이 문제를 해결하기 위해서는 strcmp()함수를 사용하면 쉽게 해결할 수 있다. 함수 이름은 문자열을 비교하다(string compare)에서 따왔다.

 

#include <stdio.h>
 
int main()
{
    char input[] = "love";
    
    int result = strcmp(input, "love");
    
    printf("%d", result);
    
    return 0;
}

 

위 코드는 strcmp()함수를 사용하여 input변수에 들어있는 문자열과 "love"를 비교하고 리턴값을 result에 저장 후 출력하는 코드이다.

실행해보면 결과 값으로 0이 출력이된다. 비교하는 문자열이 같으니 일반적으로 생각했을 때 1이 출력되어야 할 것 같지만 strcmp()함수는 비교하는 대상이 같을 때 0을 리턴하는 함수이기 때문이다. 

 

#include <stdio.h>
 
int main()
{
    char input[] = "love";
    
    int result = strcmp(input, "love");
    
    if(!result){
        printf("love");
    }else{
        printf("not love");
    }
 
    return 0;
}
 

 

if문 조건값에 not 연산자인 !를 붙인 이유는 방금 말했듯이 비교하는 대상이 같으면 0을 리턴하므로 ! 연산자를 사용하여 논리값을 뒤집어서 1로 만들기 위함이다.

반응형

+ Recent posts