카메라 개발자 공부방(SW)

[15장] 문자열 라이브러리(string.h) 본문

Langauge/C

[15장] 문자열 라이브러리(string.h)

luckmart 2021. 10. 4. 16:00
반응형

이번 시간은 string.h를 활용한 문자열 처리에 대해 공부해보겠습니다.

<string.h>에는 문자열을 손쉽게 처리하기 위한 함수들이 내장되어있습니다. 

그중에서 우린 문자열 복사, 길이, 덧붙이기, 탐색에 대해 살펴보겠습니다.

 

문자열 복사는 strcpy 함수로 가능합니다.

strcpy 첫 번째 인자는 복사될 메모리 주소(Destination) 두 번째 인자는 복사할 문자열 주소(Source)입니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()
{
    const char* pStr = "Hello World";
    char buf[32] = {};

    strcpy(buf, pStr);
    printf("%s", buf);

    return 0;

}

// 실행결과
// Hello World

 

<string.h>의 strcpy를 이용해 문자열 복사를 한 예제입니다.
_CRT_SECURE_NO_WARNINGS은 strcpy의 경고를 무시하고 사용하겠다. 정도로 알고 넘어가겠습니다~!

const는 pStr이 가리키는 메모리 공간의 값을 변경시키지 않겠다 정도로만 이해해주시기 바랍니다~

(다른 챕터에서 다루겠습니다.)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

void StrCpy(char* pDst, const char* pSrc)
{
    for (int k = 0; pSrc[k]; k++)
        pDst[k] = pSrc[k];
}

int main()
{
    const char* pStr = "Hello World";
    char buf[32] = {};

    StrCpy(buf, pStr);
    printf("%s", buf);

    return 0;
}
// 실행결과
// Hello World

strcpy 호출후 메모리 상태(하늘색: 상수메모리)

strcpy를 직접 구현한 예제입니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()
{
    const char* pStr = "Hello World";
    int length = strlen(pStr);
    printf("length: %d\n", length);
}

// 실행결과
// 11

문자열의 끝은 \0 문자로 표식 한다는 것을 기억하고 계시죠?

시작 주소를 시작으로 \0까지의 문자열 개수를 세서 반환하는 함수입니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int Strlen(const char* pStr)
{
    int count = 0;
    for (int i = 0; pStr[i]; i++)
        count++;

    return count;
}

int main()
{
    const char* pStr = "Hello World";
    int length = strlen(pStr);
    printf("length: %d\n", length);

    return 0;
}

// 실행결과
// 11

위의 예제는 strlen이란 함수를 직접 작성해보았습니다~

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()
{
    const char* pStr = "Hello World";
    char buf[32] = "ABC";
    strcat(buf, pStr);
    printf("%s", buf);

    return 0;
}

// 실행결과
// ABCHello World

strcat은 destination buffer에 문자가 있다면 그 뒤에 덧붙이는 함수입니다.

덧붙이기 위해선 destination buffer에 저장되어있는 문자열의 개수를 미리 알고 있어야 합니다

strcat 호출 후 메모리 상태(하늘색: 상수메모리)

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

const int MAX = 32;

void Strcat(char* pDst, const char* pSrc)
{
    if (strlen(pDst) + strlen(pSrc) < MAX) {
        int len = strlen(pDst);
        strcpy(pDst + len, pSrc);
    }
}

int main()
{
    const char* pStr = "Hello World";
    char buf[MAX] = "ABC";
    Strcat(buf, pStr);
    printf("%s", buf);

    return 0;
}
// 실행결과
// ABCHello World

위의 코드는 직접 구현해본 예제입니다~!

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main()
{
    const char* pStr = "Hello World";
    const char* pSrc = strstr(pStr, "World");
    printf("%s\n", pSrc);
    return 0;
}
// 실행결과
// World

strstr 함수는 문자열에서 해당 문자열과 동일한 위치를 주소를 반환해주는 함수입니다~! 
주소로 반환하니 포인터 변수로 저장시켜야겠죠?

자 오늘은 여기까지~

'Langauge > C' 카테고리의 다른 글

[17장] 동적메모리와 저장소  (0) 2021.10.06
[16장] 아스키 코드(ASCII)  (0) 2021.10.05
[14장] 배열과 문자열  (0) 2021.10.03
[13장] 포인터의 포인터(pointer of pointer)  (0) 2021.10.02
[12장] 포인터와 배열  (0) 2021.10.01
Comments