Showing

[C, C++] 문자열을 다루는 함수(strcat,sprintf,strcpy,strncpy, strcmp) 본문

language/C, C++

[C, C++] 문자열을 다루는 함수(strcat,sprintf,strcpy,strncpy, strcmp)

RabbitCode 2024. 1. 4. 14:57

#include <cstring> 문자열 관련 함수의 선언을 담고 있는 헤더파일
strcpy(...) : 문자열을 복사하는 함수
strcmp(...) : 문자열을 비교하는 함수
strcat(...) : 문자열을 이어붙이는 함수
strpos(...) : 문자열을 찾는 함수

 

이번 포스팅에서 정리할 C의 문자열 함수는

strcat

sprintf

strcpy

strncpy 이다.

1. strpcy :

destination으로 문자열 복사

char* dest = (char*)malloc(sizeof(char)*20);
char source[] = "my name";
strcpy(dest, source);
printf("%s\n", dest);

char dest[20];
char source[] = "my name";
strcpy(dest, source);
printf("%s\n", dest);
strcpy(m[i]->name, "hello ");

 

2. strncpy

destination으로 문자열 복사하되, 크기 지정 가능.

(1) strcpy로 문자열을 복사할 때, 목표 char 포인터의 크기가 복사하는 char 포인터의 크기보다 작을 수 있다.

strncpy은 문자열 복사 함수로, 두 번째 문자열의 크기를 원하는 만큼(세번째 인자) 복사할 수 있다.

Null 종료 문자를 만나면 복사를 중단한다.

char dest[6];
char source[] = "Hello, World!";
strncpy(dest, source, sizeof(dest) - 1); // Null 종료 문자 공간 확보
dest[sizeof(dest)-1] = '\0';
printf("%s\n", dest);

 

3. sprintf

형식화된 문자열을 생성하는 함수이다.

문자열 내에 형식 지정자를 사용하여 변수 값을 문자열로 변환하고 복사 가능하다.

    for (int i = 0; i <3; i++) {
        char dest[100];

        sprintf(dest, "my place");
        printf("%s\n", dest);

        sprintf(dest, "my place is here %d", i+1);
        printf("%s\n", dest);
    }

my place
my place is here 1
my place
my place is here 2
my place
my place is here 3

        char buffer[50];
        int num = 66;
        sprintf(buffer, "my answer is %d\n", num); //buffer에 "The answer is num"가 생성
        printf("%s\n", buffer); //my answer is 66

4. strcat

문자열을 이어붙이는 함수이다.

첫 번째 문자열 뒤에 두 번째 문자열을 추가합니다.

역시 첫 번째 문자열의 크기에 제한이 없으므로 주의가 필요하다. Null 종료 문자를 만날 때까지 이어붙인다.

char dest[10];
sprintf(dest, "%d world", i);
char normal[20] = "Hello,";
strcat(normal, dest);
printf("%s\n", normal);

Hello,0 world
Hello,1 world
Hello,2 world
Hello,3 world
Hello,4 world
Hello,5 world
Hello,6 world
Hello,7 world
Hello,8 world
Hello,9 world

char str1[10] = "world";
char str2[100] = "Hello,";
strcat(str2, str1);
printf("%s\n", str2);

 

5. strcmp

두 문자열이 동일한지 확인하는 함수

만약 두 문자열이 다르면 양수나 음수를 반환하고 같으면 0을 반환한다.

 

예제

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <cmath>
#include <ctime>
#define FSEEK() {fseek(stdin,0,SEEK_END);}
#include "Header.h"

struct Marine {
    int hp;
    int mp;
    char name[20];
};
int main()
{
#ifndef FSEEK
#else
    Marine* m[10] = { nullptr, };
    for (int i = 0; i < 10; i++) {
        m[i] = (Marine*)malloc(sizeof(Marine));
    }

    for (int i = 0; i < 10; i++) {
        m[i]->hp = 100 + i;
        m[i]->mp = 50 + i;
        char name[20];
        char num[1];
        sprintf(name, "hello %d world", i);
        strcpy(m[i]->name, name);
    }

    for (int i = 0; i < 10; i++) {
        printf("%d 번째\n", i+1);
        printf("%d\n", m[i]->hp = 100 + i);
        printf("%d\n", m[i]->mp = 50 + i);
        printf("name: %s\n", m[i]->name);
    }

    return 0;
#endif
}

1 번째
100
50
name: hello 0 world
2 번째
101
51
name: hello 1 world
3 번째
102
52
name: hello 2 world
4 번째
103
53
name: hello 3 world
5 번째
104
54
name: hello 4 world
6 번째
105
55
name: hello 5 world
7 번째
106
56
name: hello 6 world
8 번째
107
57
name: hello 7 world
9 번째
108
58
name: hello 8 world
10 번째
109
59
name: hello 9 world

'language > C, C++' 카테고리의 다른 글

[C++] 코딩테스트에서 자주 쓰는 함수 예제 모음  (0) 2024.02.03