strcmp, strncmp 문자열 비교 함수


C에서 문자열을 비교하는 함수가 있다.

바로 strcmp 와 ctrncmp이다.

함수의 리턴 값을 통해 문자열이 같은지 다른지 판단 할 수 있다.

문자열 길이 설정 여부에 따라 두 함수가 나누어 진다. 


strcmp 일반 문자열 비교


strcmp 사용법은 아래와 같다.

#include<string.h>

char * strcmp( const char * str1, const char * str2 )

ex) 

int result = 0;

char * str1 = "hello world";

char * str2 = "hello world";

if( strcmp( str1, str2 ) == 0 )

{

    printf("두 문자열은 같다.");

}

else

{

    printf("두 문자열은 같지 않다.");

}


 리턴 값

 의 미 

 0 보다 큰 값

 str1이 str2보다 큰 경우 

 0

 str1과 str2 일치

 0 보다 작은 값

 str1이 str2보다 작은 경우 


두개의 문자열 str1, str2가 있다. 

비교함수인 strcmp를 사용하여 확인 해보니 리턴 값이 0이 나왔다.

0이 나왔기 때문에 "두 문자열은 같다." 라는 메시지가 출력 된다.

예제를 보며 결과를 확인해 보자.


[예제]

#include <stdio.h>

#include <string.h> //<--- strcmp 함수 사용을 위해 추가 한다. 


int main(int argc, char *argv[]) 

{


int result = 0;

char * str1 = "hello world";

char * str2 = "hello world";

if( strcmp( str1, str2 ) == 0 ) //<--- strcmp 결과 값이 0이면 두 문자열이 같고 그렇지 않으면 다르다.

{

    printf("두 문자열은 같다.");

}

else

{

    printf("두 문자열은 같지 않다.");

}


}



 실행 결과

 두 문자열은 같다.

 계속하려면 아무 키나 누르십시오...




strncmp 지정 된 길이만큼 문자열 비교


strncmp 사용법은 아래와 같다.

#include<string.h>

char * strncmp( const char * str1, const char * str2, size_t n )

ex) 

int result = 0;

char * str1 = "hello man";

char * str2 = "hello world";

if( strncmp( str1, str2, 5 ) == 0 )

{

    printf("두 문자열은 같다.");

}

else

{

    printf("두 문자열은 같지 않다.");

}


 리턴 값

 의 미 

 0 보다 큰 값

 str1이 str2보다 큰 경우 

 0

 str1과 str2 일치

 0 보다 작은 값

 str1이 str2보다 작은 경우 


두개의 문자열 str1, str2가 있다. 

비교함수인 strcmp를 사용하여 확인 해보니 리턴 값이 0이 나왔다.

0이 나왔기 때문에 "두 문자열은 같다." 라는 메시지가 출력 된다.

예제를 보며 결과를 확인해 보자.


[예제]

#include <stdio.h>

#include <string.h> //<--- strncmp 함수 사용을 위해 추가 한다. 


int main(int argc, char *argv[]) 

{


int result = 0;

char * str1 = "hello man";

char * str2 = "hello world";

if( strncmp( str1, str2, 5 ) == 0 ) //<--- strncmp 결과 값이 0이면 두 문자열이 같고 그렇지 않으면 다르다.

{

    printf("두 문자열은 일부 같다.");

}

else

{

    printf("두 문자열은 일부 같지 않다.");

}

}



 실행 결과

 두 문자열은 일부 같다.

 계속하려면 아무 키나 누르십시오...





반응형

strcat, strncat 문자열 추가 함수


C에서 문자열을 추가하는 함수가 있다.

바로 strcat 와 ctrncat이다.

하나의 문자열 뒤에 또 다른 문자열을 추가하는 함수이다.

문자열 길이 설정 여부에 따라 두 함수가 나누어 진다. 


strcat 일반 문자열 추가


strcat 사용법은 아래와 같다.

#include<string.h>

char * strcat( char * dest, const char * src )

ex) 

char destStr[128] = "test string ";

char * srcStr = "hello world";

strcat( destStr, srcStr );


첫번째 인자 문자열인 destStr 뒤에 두번째 문자열인 "hello world"가 추가 된다.

예제를 보며 결과를 확인해 보자.


[예제]

#include <stdio.h>

#include <string.h>

#include <string.h> //<--- strcat 함수 사용을 위해 추가 한다. 


int main(int argc, char *argv[]) 

{

char destStr[128] = "test string ";

const char * srcStr = "hello world";

strcat( destStr, srcStr ); //문자열을 합친다. 

printf( " destStr[%s] \n",destStr);

return 0;

}



 실행 결과

 destStr[test string hello world]

 계속하려면 아무 키나 누르십시오...




strncat 지정 된 길이만큼 문자열 추가


strncpy 사용법은 아래와 같다.

#include<string.h>

char * strncat( char * dest, const char * src, size_t n )

ex) 

char destStr[128] = "test string";

char * srcStr = "hello world";

strncpy( destStr, srcStr, 5 );


두번째 인자 문자열인 "hello world" 에서 hello만 추가 하고 싶다.

그럼 strncat을 사용해 5문자열만 추가하게 할 수 있다.

다음 예제를 살펴 보자

[예제]

#include <stdio.h>

#include <string.h>

#include <string.h> //<--- strncpy 함수 사용을 위해 추가 한다. 


int main(int argc, char *argv[]) 

{

char destStr[128] = "test string"

const char * srcStr = "hello world";

strncat( destStr, srcStr, 5 ); //hello만 추가 하기 위해 5를 넣는다. hello는 5byte 이기 때문에 5를 넣는다.

printf( " destStr[%s] \n",destStr);

return 0;

}



 실행 결과

 destStr[test string hello]

 계속하려면 아무 키나 누르십시오...




반응형

strcpy, strncpy 문자열 복사 함수


C에서 문자열을 복사하는 함수가 있다.

바로 strcpy 와 ctrncpy이다.

두 함수의 차이는 복사할 문자열 길이 설정 여부 이다.

아래와 같이 자세히 알아보도록 하겠다.


strcpy 일반 문자열 복사


strcpy 사용법은 아래와 같다.

#include<string.h>

char * strcpy( char * dest, const char * src )

ex) 

char destStr[128] = {0,};

char * srcStr = "hello world";

strcpy( destStr, srcStr );


2번째 인자 값에 있는 문자열을 첫번째 인자 값에 복사를 한다.

이때 주의 할 것이 2번째 문자열의 길이가 1번째 문자열 공간보다 많다면 overflow가 발생한다.

예를 들어 설명해보겠다.

2번째 인자의 문자열 값이 "abcde" 이렇게 5byte라고 하자.

1번째 인자의 문자열 공간이 destStr[3] 이렇게 3byte 밖에 없다고 하자.

그럼 5바이트를 3바이트 공간인 destStr에 복사를 하면 

공간보다 복사할 문자열이 더 크기 때문에 destStr 배열변수에 메모리 overflow가 발생한다.

overflow가 발생하면 원하는 결과를만들어 낼 수 없으니 주의해서 복사 한다.


[예제]

#include <stdio.h>

#include <string.h>

#include <string.h> //<--- strcpy 함수 사용을 위해 추가 한다. 


int main(int argc, char *argv[]) 

{

char destStr[128] = {0,};

const char * srcStr = "hello world";

strcpy( destStr, srcStr ); //호출 전에 destStr 공간이 충분한지 확인 한다. 

printf( " destStr[%s] \n",destStr);

return 0;

}



 실행 결과

 destStr[hello world]

 계속하려면 아무 키나 누르십시오...




strncpy 지정 된 길이만큼 문자열 복사


strncpy 사용법은 아래와 같다.

#include<string.h>

char * strncpy( char * dest, const char * src, size_t n )

ex) 

char destStr[128] = {0,};

char * srcStr = "hello world";

strncpy( destStr, srcStr, sizeof(destStr)-1 );


strcpy와 다른 점은 3번째 인자에 복사할 길이를 넣는 것이다.

strcpy를 사용시 overflow 발생 할수 있는 문제 점에 대해 말했다.

이러한 문제를 예방해줄 함수가 strncpy이다.

마지막 인자에 첫번째 인자 메모리 공간만큼만 복사하게 설정하면 overflow가 일어날 일이 없다.

이글을 읽는 분들도 꼭 strncpy를 사용하는 것을 습관화 하기를 바란다.


[예제]

#include <stdio.h>

#include <string.h>

#include <string.h> //<--- strncpy 함수 사용을 위해 추가 한다. 


int main(int argc, char *argv[]) 

{

char destStr[128] = {0,};

const char * srcStr = "hello world";

strncpy( destStr, srcStr, sizeof(destStr)-1 ); //길이를 넣어주기 때문에 overflow 걱정이 사라진다. 

printf( " destStr[%s] \n",destStr);

return 0;

}



 실행 결과

 destStr[hello world]

 계속하려면 아무 키나 누르십시오...





반응형

C++ 참조자(Reference) 사용법



C++ 참조자는 변수를 가리키는 변수다.

예를 들어 숫자 10을 담고 있는 변수 a 가 있다.

a를 가리키는 참조자 변수 b를 만들었다.

b에 값을 변경하면 a도 바뀌게 된다.



 참조자(Reference) 이해

 

사용법은 아래와 같다.

 int a = 10;

 int &b = a;


위에서 굵은 글씨로 &b라고 표시 된 부분이 참조자 변수 사용 방법이다.

&는 변수의 주소로도 사용되어 포인트를 가리킬때도 사용된다.

하지만 위의 참조자는 다른 내용이니 혼돈하지 말자.


[참조자의 잘못 사용 예]

 잘못된 사용

 설명

 int &b = 10;  

 참조자에 직접 데이터를 넣을 수 없다.

 int &b;

 참조자 선언과 동시에 가리킬 변수를 설정해 줘야 한다.

 int &b = NULL;

 참조자는 NULL 값이 허용되지 않는다. 


[전체 예제]


#include <iostream>

using namespace std;


int main(int argc, char** argv) 

{

    int a = 10;

    int &b = a;


    cout<<"a : "<< a <<endl;

    cout<<"b : "<< b <<endl;


    b = 20;

    cout<<"a : "<< a <<endl;

    cout<<"b : "<< b <<endl;

 

    return 0;

}


[결과]

a : 10

b : 10

a : 20

b : 20




 참조자(Reference)를 이용한 함수 호출

 

함수의 인자를 참조자로 선언 하면 어떻게 될까.


 void dataPlus( int &value );


해당 함수를 호출 할 때 인자 값으로 넣은 변수가 변경 된다.

이것을 Call-by-reference라 한다.

참고로 C에서는 다음과 같이 선언해야 호출 한 쪽의 변수가 변경 된다.

void dataPlus( int *value );

포인터는 복잡하니 참고로만 알아둔다.


[전체 예제]


#include <iostream>

using namespace std;


void dataPlus( int &value)

{

      value = value + 1;

}


int main(int argc, char** argv) 

{

    int a = 10;


    cout<<"a : "<< a <<endl;

    dataPlus( a );

    cout<<"a : "<< a <<endl;

 

    return 0;

}


[결과]

a : 10

a : 11





반응형

'프로그램 > C++' 카테고리의 다른 글

[C++] bool 자료형  (0) 2017.12.29
[C++] namespace 사용법  (0) 2017.12.27
[C++]인라인 함수 사용법  (0) 2017.12.26
[C++]함수 매개변수 디폴트 값  (0) 2017.12.25
[C++]함수 오버로딩 (Function Overloading)  (0) 2016.12.03

+ Recent posts