문자열(String)이란?
C 언어에서 여러 개의 문자들이 하나의 배열로 묶인 것을 문자열(string)이라고 부릅니다. 문자열은 마지막에 널 문자('\0')를 포함한다는 점이 일반적인 문자 배열과 다릅니다.
문자열 선언
문자열은 아래와 같은 형식으로 선언합니다.
char stringname [size];
예를 들어 char string[50];은 최대 50글자를 저장할 수 있는 문자열을 선언한 것입니다.
문자열 초기화
문자열을 초기화하는 방법에는 크게 두 가지가 있습니다.
1. 단일 문자 상수 사용
각 문자를 요소로 나열하고 마지막에 널 문자를 직접 추가하는 방식입니다.
char string[10] = {'H', 'e', 'l', 'l', 'o', '\0'};
2. 문자열 상수 사용
큰따옴표로 묶인 문자열 리터럴을 대입하면 컴파일러가 자동으로 널 문자를 붙여줍니다.
char string[10] = "Hello";
문자열 접근하기
입출력 시 제어 문자 %s를 사용하면 널 문자('\0')를 만날 때까지 문자열 전체를 한 번에 처리할 수 있습니다. 반면 문자 하나씩 접근하려면 인덱스와 반복문을 활용해야 합니다.
ASCII 값 출력 로직
실행 중에 입력받은 문자열의 각 문자에 대한 ASCII 값을 출력하는 핵심 로직은 다음과 같습니다. 문자 하나는 내부적으로 정수 값으로 저장되므로, 같은 문자를 %c와 %d로 각각 출력하면 문자와 그에 대응하는 ASCII 코드를 동시에 확인할 수 있습니다.
while(str[i] != '\0'){
printf("\n%c의 ASCII 값 = %d", str[i], str[i]);
i++;
}
예제 프로그램
다음은 사용자로부터 문장을 입력받아 각 문자의 ASCII 값을 출력하는 완전한 C 프로그램입니다.
#include<stdio.h>
int main() {
char string[50];
int i = 0;
printf("문장을 입력하세요: ");
gets(string);
while(string[i] != '\0') {
printf("\n%c의 ASCII 값 = %d", string[i], string[i]);
i++;
}
getch();
return 0;
}
참고: gets() 함수는 입력 길이를 제한할 수 없어 버퍼 오버플로우 위험이 있어 현대 C 표준(C11)에서는 제거되었습니다. 실제 프로젝트에서는 fgets()나 scanf()의 폭 지정 기능을 사용하는 것이 안전합니다.
실행 결과
위 프로그램을 실행하고 "Tutorials Point"를 입력하면 다음과 같은 결과가 출력됩니다.
문장을 입력하세요: Tutorials Point T의 ASCII 값 = 84 u의 ASCII 값 = 117 t의 ASCII 값 = 116 o의 ASCII 값 = 111 r의 ASCII 값 = 114 i의 ASCII 값 = 105 a의 ASCII 값 = 97 l의 ASCII 값 = 108 s의 ASCII 값 = 115 의 ASCII 값 = 32 P의 ASCII 값 = 80 o의 ASCII 값 = 111 i의 ASCII 값 = 105 n의 ASCII 값 = 110 t의 ASCII 값 = 116
출력 결과에서 공백 문자의 ASCII 값이 32로 표시되는 것도 확인할 수 있습니다. 이처럼 반복문과 서식 지정자만 활용하면 별도의 라이브러리 함수 없이도 문자열의 모든 문자를 손쉽게 분석할 수 있습니다.