문자열은 문자의 집합을 의미하며, C언어에서는 문자열을 위한 자료형은 제공하지 않습니다. 따라서 C언어에서는 배열을 이용하여 문자열을 처리합니다.
문자열 배열의 초기화
char st[5]={'L', 'o', 'v', 'e', '\0'};
st[0] |
st[1] |
st[2] |
st[3] |
st[4] |
'L' |
'o' |
'v' |
'e' |
'\0' |
C언어에서는 문자열 끝에 NULL(0, '\0')문자를 자동으로 포함시킵니다. 따라서 배열로 문자열을 다룰 때에는 문자열 끝에 자동으로 붙는 '\0' 문자까지 포함하여 '문자길이+1' 로 크기를 설정해야 합니다. sizeof 연산자를 이용하면 문자열의 크기를 알아볼 수 있습니다.
코드
#include <stdio.h>
int main()
{
printf("size is %d bytes", sizeof("Love"));
return 0;
}
출력결과

문자열을 초기화하는 방법은 다음과 같이 다양한 방법이 있습니다. 모두 같은 값이 초기화되었으며, 같은 값이 출력됩니다.
#include <stdio.h>
int main()
{
int i;
char string1[5]={'L', 'o', 'v', 'e', '\0'};
char string2[]={'L', 'o', 'v', 'e', '\0'};
char string3[5]={'L', 'o', 'v', 'e', 0};
char string4[5]="Love";
char string5[]="Love";
//char string6[5];
//string6="Love"; //가능한 방법이 아니다.
printf("%s\n", string1);
printf("%s\n", string2);
printf("%s\n", string3);
printf("%s\n", string4);
printf("%s\n", string5);
return 0;
}
출력결과
문자열의 출력
문자열을 출력하는 방법에는 문자열 배열의 각 값을 출력하거나, 변환문자 %s를 이용하여 배열의 시작부터 NULL('\0')문자를 만날 때까지의 값을 한꺼번에 출력하는 방법이 있습니다. 아래의 두 방법은 같은 결과를 출력합니다.
#include <stdio.h>
int main()
{
int i;
char string[5]="Love";
for(i=0;i<5;i++)
{
printf("%c", string[i]); //문자 각각을 출력
}
printf("\n%s\n", string); //변환문자 %s를 이용하여 출력
return 0;
}
출력결과
문자열의 입력
문자열을 입력받기 위해 scanf()함수를 이용할 때에는 문자나 정수를 입력받을 때와는 달리 '&'를 사용하지 않습니다. '&'를 사용하지 않고 배열 이름 만을 사용하는 이유는 배열 이름 자체가 메모리에서 배열 시작 주소를 나타내기 때문입니다. 변환문자 %s는 문자열이 저장된 메모리의 시작 주소를 입출력합니다. 따라서 &string[0]과 string은 같으므로, 배열 이름 string 만을 사용하는 것입니다.
코드
#include <stdio.h>
int main()
{
char string[5]="Love";
printf("%d\n", &string[0]); //배열의 시작 주소를 출력
printf("%d\n", string); //배열명을 정수형으로 출력
return 0;
}
출력결과

코드
#include <stdio.h>
int main()
{
int i;
char name[20];
printf("이름을 입력하세요:");
scanf("%s", name);
printf("\n당신의 이름은 %s입니다.\n", name);
return 0;
}
출력결과
한글 문자열
한글 문자열도 마찬가지로 %s를 이용하여 출력가능합니다. 한글은 2Byte이므로 한 글자식 출력하기 위해서는 %c%c로 가능하며, 띄어쓰기를 하는 경우 오류가 나타납니다.
코드
#include <stdio.h>
int main()
{
int i;
char name[7]="홍길동";
printf("%s\n", name);
printf("%c%c\n", name[0], name[1]);
printf("%c %c\n", name[2], name[3]);
printf("%c%c\n", name[4], name[5]);
return 0;
}
출력결과
'C 언어 프로그래밍 > 배열' 카테고리의 다른 글
2차원 배열 (3) | 2020.06.07 |
---|---|
1차원 배열 (0) | 2020.06.06 |
댓글