본문 바로가기
c

13_문자열(string)

by RongBee 2023. 4. 11.

string은 문자열이라는 뜻을 가지고 있다.

 

C언어에서는 배열의 종류중 하나로 문자형 데이터로 이루어진 배열을 의미한다.

 

문자열을 나타낼 수 있는 방법은 여러가지가 있다.

 

 

char str[5];

str[0] = 'A';
str[1] = 'P';
str[2] = 'P';
str[3] = 'L';
str[4] = 'E';

for(int i = 0; i < 5; i++) printf("%c",str[i]);
printf("\n");

 

 

1. 먼저 배열의 요소에 데이터를 하나씩 넣어서 for문으로 출력하는 방법이 있다.

 

 

char str2[5] = { 'A', 'P', 'P', 'L', 'E'};

for(int i = 0; i < 5; i++) printf("%c", str2[i]);
printf("\n");

 

 

2.  이번 방법은 변수 선언과 동시에 배열의 인덱스만큼 데이터를 초기화 해주고 for문으로 출력하는 방법이다.

 

 

char str3[5] = "APPLE";

for(int i = 0; i <5; i++) printf("%c", str3[i]);
printf("\n");

 

 

3. 이번엔 문자열 상수 표기법인 " "를 사용하여 str3를 선언과 동시에 초기화 해주고 for문으로 출력하는 방법이다.

 

 

printf("str3 : %s \n", str3);

 

 

그 후 %s(string)라는 서식문자를 사용하여 str3을 출력하게 된다면 어떻게 될까?

 

 

%s로 컴파일 결과

 

 

APPLE뒤에 오는 이상한 문자가 나오는 것을 볼 수 있다.

 

왜 이런 문자가 나오게 되는걸까?

 

C에서 문자열(string)은 null 문자(\0)로 끝나는 일련의 문자이다.

 

그런데 처음에 변수를 선언할 때 내가 5개의 문자가 들어갈 배열이라고 선언해줬기 때문에 

 

5개의 문자 외에는 추가되는 NULL문자가 없었다.

 

그리고 printf("%c", str3[i]); 에서 %c 서식문자는 문자를 출력하기 위한 것이므로

 

str3 배열에 있는 NULL문자가 없는 문자열의 끝까지 출력을 진행하게 된다.

 

그러므로 "APPLE" 이후 메모리에 저장된 데이터가 출력되게 되어

 

이상한 "APPLE儆儆儆儆儆儆儆儆儆儆儆儆儆?"가 나오게 된 것이다.

 

 

char str4[6] = "APPLE";

printf("str4 : %s \n", str4);

char str5[] = "APPLE";

printf("str5 : %s \n", str5)

 

 

이렇게 배열의 길이를 6으로 하거나, 배열 형태의 str5를 선언하면 컴파일러가 자동적으로 초기화를 해준다.

 

컴파일러는 자동으로 끝에 null 문자를 추가하여 문자열의 끝을 표시한다.

 

 

 

 

'c' 카테고리의 다른 글

15_포인터(Pointer)  (0) 2023.04.17
14_함수(Function)  (0) 2023.04.14
12_배열(Array)  (0) 2023.04.08
11_구조체(structure)  (0) 2023.04.05
10_반복문2(for)  (0) 2023.04.02

댓글