문자, 문자열 함수

Gogi·2023년 5월 24일
0

C언어 기초 목록

목록 보기
17/23

문자, 문자열을 다루는 함수들

C언어에서는 문자와 문자열을 다루기 위한 다양한 함수를 제공한다. 문자열의 길이를 반환하거나, 복사하거나, 이어 붙이는 등의 함수와 입/출력을 맡은 함수로 나뉜다.


개념 설명 및 사용 예시

- 문자 (Character)

char 자료형을 사용하여 단일 문자를 표현한다. 문자는 작은따옴표(' ')로 감싸서 표기하는 것이 원칙이다.
예시: char ch = 'A';

- 문자열 (String)

char 자료형배열을 사용하여 문자열을 표현한다. 문자열은 큰따옴표(" ")로 감싸서 표기하는 것이 원칙이다.
예시: char str[] = "Hello Sidney...";

- 문자열 함수 (String Function)

C언어에는 문자열로 특정한 작업을 수행하는데 유용한 함수들이 내장되어 있다. 이를 사용하기 위해선 <string.h> 헤더 파일을 추가해야 된다.

문자열의 길이를 알아내는 함수

1. strlen(char* str);
2. strnlen(char* str, size_t maxLength);

1. '\0'를 포함하지 않고 문자열의 길이를 반환한다.
2. maxLength 값보다 작으면 문자열의 길이를 반환, 
   아닐 시 maxLength 값을 반환한다.
두 문자열을 비교하는 함수

1. strcmp(char* str1, char* str2);
2. strncmp(char* str1, char* str2, size_t 3);

1. 두 문자열을 이진 비교하여 값을 반환한다.
2. 두 문자열의 n자 까지만 비교하여 값을 반환한다.

// strcmp ex1: ABCDEF > ABCDE   양수
// strcmp ex2: ABCDE == ABCDE   0
// strcmp ex3: ABCDE < ABCDEF   음수

// strncmp ex: ABCDE == ABCZX   0 (ABC까지만 비교)
두 문자열을 이어붙이는 함수

1. strcat(char* str1, char* str2);
2. strncat(char* str1, char* str2, int n);

1. 두 문자열을 연결하고 연결된 문자열을 반환한다.
2. str2의 n개 문자를 str1 뒤에 연결하고 '\0'를 추가한다.
문자열을 복사하는 함수

1. strcpy(char* str1, char* str2);
2. strncpy(char* str1, char* str2, size_t n);

1. '\0'를 포함한 str2를 복사하여 str1에 덮어씌운다.
2. str2 문자열 n개를 복사하여 str1에 덮어씌운다.

// strncpy는 널 문자를 추가해주지 않으므로 주의
문자, 문자열을 검색하는 함수

1. strchr(char* str, int ch);
2. strrchr(char* str, int ch);
3. strstr(char* str1, char* str2);

1. str에서 문자 ch가 들어있는지 정순으로 검색하고
   주소 값을 반환하고 없을 시 NULL을 리턴한다.
2. strchr과 달리 문자열의 뒤에서부터 역순으로 검색한다.
3. 문자가 아닌 문자열이 들어있는지 검색한다.
문자열을 분리하는 함수

strtok(char* str, const char* DEL);

"DEL"에 구분자로 사용할 문자열을 넣으면 이를 기준으로
문자열을 분리하고 결과를 주소 값으로 반환한다.

//ex1: 공백을 구분자로 사용할 경우 예시
char str[20] = "Oh Hello Sidney"; 
char *ptr = strtok(s1, " ");    
while (ptr != NULL)               
{
    printf("%s\n", ptr);          
    ptr = strtok(NULL, " ");      
}

잘린 문자열을 한 번에 얻을 수는 없기 때문에
while문으로 문자열을 반복해서 자르다가
더 이상 자를 수 없으면 반복이 멈추는 방식으로 사용된다.

- 문자열 입력 함수 (String Input Function)

아래의 함수들은 표준 입력 스트림 stdin에서 문자열을 입력 받는데 쓰이는 함수들이다. sizeof()연산자가 포함된 함수의 경우 입력 받을 수 있는 최대 문자 길이를 조절할 수 있다.

char ch = getchar();

실행되면 문자열 or 문자를 입력 받는다.
입력 받을 때마다 하나씩 입력 버퍼에 저장되고
개행 시 입력 버퍼에 저장된 값이 ch에 저장된다.

// ex: abc를 입력하고 엔터를 쳤다면 b가 저장된다.
Scanf("%s", str);
Scanf_s("%s", str, sizeof(str));

'\n'(개행)전까지 서식화된 문자열을 입력받는다.
입력 버퍼에 '\n'가 남으며, 
('%c' 사용 시 주의 개행도 문자로 인식하기 때문에)
문자열 끝에 자동으로 널 문자'\0'를 붙인다.
공백을 읽지 못하므로 문자열 입력용으론 적합하지 않다.

//ex: AB CD\n -> AB -> AB\0 -> _
gets(str);
gets_s(str, sizeof(str));

'\n'(개행)전까지 문자열을 입력 받는다.
입력 버퍼에 '\n'이 있을 경우 널 문자 '\0'로 바꾼다. 
공백을 출력할 수 있다.

//ex: AB CD\n -> AB CD\n -> AB CD\0 -> _
fgets(str, sizeof(str), stdin);

'\n'(개행)전까지 문자열을 입력 받는다.
gets와 달리 입력 버퍼에 '\n'가 남으므로
연속 입력 시엔 별도로 버퍼를 비워야한다.
문자열 끝에 자동으로 널 문자'\0'를 붙인다.

//ex: AB CD\n -> AB CD\n -> AB CD\0 -> \n

- 문자열 출력 함수 (String Output Function)

아래의 함수들은 표준 출력 스트림 stdout에서 문자열을 출력하는데 쓰이는 함수들이다.

putchar(int ch);

단일 문자를 출력한다.
출력 버퍼를 거치지 않고 즉시 출력된다.
printf("%s", str);

서식화된 문자열을 출력한다.
서식 문자를 사용해 출력을 서식화할 수 있다.
'\n'(개행)을 만나거나 버퍼가 가득찼을 때
버퍼에 있는 문자열을 출력한다.
puts(str);

문자열을 출력하고 '\n'(개행)을 추가한다.
'\n'(개행)을 만나거나 버퍼가 가득찼을 때
버퍼에 있는 문자열을 출력한다.
fputs(str, stdout);

해당 스트림에 문자열을 출력할 때 사용된다.
자동으로 개행되지 않는다.

주의사항

  • 문자열을 다룰 때는 NULL 문자\0를 항상 염두해야 함.
  • gets, scanf는 보안 취약점으로 인해 사용되지 않음.
  • 함수의 작동 원리를 숙지하고 사용할 것.

업데이트

2023년 06월 11일: strcmp 함수 틀린 내용 수정

profile
C, C++, C#, Unity

0개의 댓글