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함수의 매개변수에 argc와 argv가 있는데 실행할 때 입력한 argument 정보를 main 함수에서 받아올 때 사용한다.

실행하면 위 그림처럼 실행 결과가 오류 없이 성공하고 실행파일의 전체 경로를 복사하여 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
'프로그래밍 > 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 |