C언어 문자열 배열 선언 및 문자열의 입력과 출력


C언어 문자열 배열은 일반 배열 또는 큰 따옴표로 간단히 선언할 수 있습니다. 문자열 배열 출력은 printf(%s) 또는 puts() 함수를 사용합니다. 공백 유무에 따라 사용 함수가 달라질 수 있습니다.

C언어 문자열 배열 생성

C언어 문자열은 배열로 저장을 합니다. 문자열을 배열에 넣는 기본적인 구조는 일반 정수 처럼 데이터를 하나씩 쉼표로 나열하는 것입니다. 문자이기 때문에 각 문자에는 작은 따옴표가 붙습니다.


char x[5] = { 'a', 'b', 'c', 'd' };

또는 각 배열 원소에 개별 삽입할 수 있습니다.

char x[5];
	x[0] = '1';
	x[1] = '2';
	x[2] = '3';
	x[3] = '4';

C언어 문자열 자료형을 생성하는 가장 쉬운 방법은 큰 따옴표에 삽입하는 방법입니다.

char x[5] = "abcd";

배열은 선언시 개수를 입력하지 않아도 배열 개수를 자동 계산해서 생성합니다.


char x[] = "abcd";

배열 개수보다 실제 값이 부족할 경우 잔여 메모리 공간에는 \0 요소가 삽입됩니다.

char x[5] = "a";

배열의 개수는 항상 실제 값의 개수 보다 한 개 많다는 것을 유의합니다.

char x[5] = "abcde"; //문자 5개가 들어가면 오류입니다. (배열 개수 - 1개) = 4개만 들어갈 수 있습니다.
char x[5] = "abcd\0"; //또는 \0 문자를 채워넣으면 됩니다.

C언어 문자열 배열 출력

문자열 배열의 출력은 %s 기호를 사용합니다.

#include<stdio.h>
void main() {
	char x[5] = "abcd\0";

	printf("%s", x);
}

결과


abcd

하지만 puts(변수명) 함수를 사용하면 같은 기능을 하면서 코드 길이를 줄일 수 있습니다.

#include<stdio.h>
void main() {
	char x[5] = "abcd\0";

	puts(x);
}

C언어 문자열 배열 입력

띄어쓰기가 없는 문자열은 scanf() 함수로 입력을 받을 때 %s 기호의 사용이 가능합니다.

#include<stdio.h>
void main() {
	char x[6];

	printf("abcde를 입력해보세요.");
	scanf("%s", &x);
	printf("%s", x);
}

결과

abcde

하지만 입력한 글자에 공백이 있는 경우 오류가 발생합니다. 그럴 경우 헤더에 #include<string.h> 함수를 추가해주고, scanf()에서는 데이터를 %s에서 %[^n]으로 변경해주면 됩니다.


#include<stdio.h>
#include<string.h>
//문자열 함수를 불러옵니다.
void main() {
	char x[6];

	printf("aa aa를 입력해보세요.");
	scanf("%[^\n]", &x); //%s대신 %[^\n] 대입
	printf("%s", x);
}

결과

aa aa

또는 헤더에 함수 추가나 scanf()를 사용하지 않고 gets(변수)라는 간단한 함수로 공백을 입력받을 수 있습니다.

#include<stdio.h>
void main() {
	char x[6];

	printf("ab aa를 입력해보세요.");
	gets(x);
	puts(x);
}

결과

aa aa

출력에 puts() 함수까지 사용하면 코드 길이는 더 짧아집니다.