프로그래밍/C

C언어 문자열 다루기

swedu 2023. 1. 17. 05:26
728x90
반응형

2023.1.16. 최초 작성

 

 

.

C언어에서 문자열을 다루는 방법은 포인터와 배열이 있다. 문자열은 문자를 연속해서 기억하는 것으로 “ ” 큰따옴표로 묶어서 표현한다. 아래 코드는 배열과 포인터를 이용해 문자열을 저장하는 예제이다.

#include <stdio.h>
#include <string.h>
void main() {
	char str1[] = "Hello\0World";  // 배열을 이용한 문자열 초기화
	char str2[6]; // 배열 선언
	str2[0] = 'a';  // 문자 한개씩 입력
	str2[1] = 'p';
	str2[2] = 'p';
	str2[3] = 'l';
	str2[4] = 'e';
	str2[5] = '\0'; // 문자열의 끝을 의미하는 NUL문자
	char str3[10];
	strcpy(str3, "banana"); // 문자열 복사
	char* str4 = "carrot";  // 포인터를 이용한 문자열 초기화
	printf("%s\n", str1);
	printf("%s\n", str2);
	printf("%s\n", str3);
	printf("%s\n", str4);
}

[실행 결과]

Hello

apple

banana

carrot

 

문자열을 출력한다는 것은 시작 주소를 기준으로 NUL 문자인 \0을 만날 때까지 출력하는 것이다. printf함수의 %s는 문자열을 출력하는 것으로 \0 뒤에 있는 문자열은 출력되지 않는다.

 

 

 

아래 코드는 다양한 함수를 이용하여 문자열을 입력받는 방법이다.

#include <stdio.h>
void main() {
	char str1[10];
	scanf("%s",str1);
	printf("%s\n", str1);
	getchar();
	gets(str1);
	printf("%s\n", str1);
	gets_s(str1, sizeof(str1));
	printf("%s\n", str1);
	fgets(str1, sizeof(str1), stdin);
	printf("%s\n", str1);
}

[실행 결과]

hello

hello

world

world

apple

apple

1234

1234

 

 

 

 

string.h 헤더 파일에는 문자열 처리를 위한 다양한 함수들이 있는데 대표적으로 자주 사용하는 함수는 아래와 같다.

함수이름 함수원형 설명
strlen() size_t strlen(const char* str); 널 문자를 제외하고 string 길이를 리턴
strcmp() int strcmp(const char *string1, const char *string2); 문자열을 비교하여 문자열 1이 문자열 2보다 사전적으로 앞에 있으면 -1, 뒤에 있으면 1 반환 (길이 체크 기능추가는 strncmp)
strcpy() char *strcpy(char *string1, const char *string2); 널 문자를 포함하여 문자열2를 문자열1에서 지정한 위치로 복사 (길이 체크 기능추가는 strncpy)
strcat() char *strcat(char *string1, const char *string2); 문자열 1에 문자열 2 더함 (길이 체크 기능추가는 strncat)
strstr() char *strstr(const char *string1, const char *string2); 문자열1에서 문자열2의 첫 번째 표시 시작 위치에 대한 포인터를 리턴

 

좀 더 자세한 내용은 아래 IBM 문서에서도 잘 설명되어있다.

https://www.ibm.com/docs/ko/i/7.5?topic=files-stringh#stringh

 

<string.h>

포함 파일은 문자열 조작 함수를 선언합니다. 또한 포함 파일은 NULL 매크로 및 size_t 유형을 정의합니다. NULL 및 유형 size_t에 대한 자세한 정보는 의 내용을 참조하십시오.

www.ibm.com

 

 

아래 코드는 strlen 함수 실습 예제이다.

#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
    if (argc != 2)
        printf("Usage: %s string\n", argv[0]);
    else
        printf("argument length : %d\n", (int)strlen(argv[1]));
}

main함수의 매개변수에 argcargv가 있는데 실행할 때 입력한 argument 정보를 main 함수에서 받아올 때 사용한다.

 

 

[그림1] 출력정보에서 실행파일의 전체 경로 확인

 

 

실행하면 위 그림처럼 실행 결과가 오류 없이 성공하고 실행파일의 전체 경로를 복사하여 cmd 창에서 아래와 같이 파일명 뒤에 argument를 추가하여 실행한다.

 

[실행 방법]

C:\Users\korean>C:\Users\korean\source\repos\MyProject\x64\Debug\MyProject.exe helloworld

 

[실행 결과]

argument length : 10

 

 

아래 코드는 strcmp 함수의 실습 예제이다.

#include <stdio.h>
#include <string.h>
int main(void)
{
    char str1[20] = "hello";
    char str2[20] = "world";
    printf("strcmp : %d\n", strcmp(str1, str2));
    return 0;
}

[실행 결과]

strcmp : -1

 

 

 

아래 코드는 strcpy 함수의 실습 예제이다.

#include <stdio.h>
#include <string.h>
int main(void)
{
    char str1[20];
    strcpy(str1, "hello world");
    printf("str1 : %s \n", str1);
    return 0;
}

[실행 결과]

str1 : hello world

 

 

 

아래 코드는 strcat 함수의 실습 예제이다.

#include <stdio.h>
#include <string.h>
#define SIZE 40
int main(void)
{
    char buffer1[SIZE] = "Hello";
    char* ptr;
    ptr = strcat(buffer1, " world");
    printf("buffer1 = %s\n", buffer1);
    printf("ptr = %s\n", ptr);
    return 0;
}

[실행 결과]

buffer1 = Hello world

ptr = Hello world

 

 

 

아래 코드는 strstr 함수의 실습 예제이다.

#include <stdio.h>
#include <string.h>
int main(void)
{
    char* string1 = "Hello world 1234";
    char* string2 = "world";
    char* result;
    result = strstr(string1, string2);
    printf("%s\n", result);
    return 0;
}

[실행 결과]

world 1234

 

 
728x90
반응형

 

728x90
반응형

'프로그래밍 > C' 카테고리의 다른 글

C언어 포인터 배열과 배열 포인터  (0) 2023.01.19
C언어 구조체  (0) 2023.01.17
CONST를 이용한 상수화  (1) 2023.01.16
C언어 포인터 변수  (0) 2023.01.16
2차원 배열도 1차원 배열이다.  (0) 2023.01.09