초기화한 문자들은 배열의 처음부터 차례로 저장되어 문자열을 만든다. 이때 남는 배열 요소에는 자동으로 0이 채워지는데, 이를 널 문자라고 한다. 널 문자는 문자열의 끝을 표시하는 용도로 쓰인다.
#include <stdio.h>
#include <string.h> → <string.h>는 문자열 관련 함수의 원형을 모아둔 헤더파일이다.
<string.h>는 strcpy함수에 접근하기 위해 사용한다.
srtcpy(저장될 배열명, 저장할 문자열); → srtcpy(str1, “tiger”);
위의 경우 str1에 tiger을 대입하겠다는 말이다. 첫번째 인수인 str1은 문자열을 저장할 수 있도록 커야한다.
또한 첫번째 인수에는 문자열 상수를 사용할 수 없다. 상수는 바뀌지 않는 값이기 때문이다.
#include <stdio.h>
#include <string.h> // 문자열 관련 함수 원형을 모아놓은 헤더 파일
int main(void)
{
char str1[80] = "cat";
char str2[80];
strcpy(str1, "tiger"); // str1 배열에 "tiger" 복사
strcpy(str2, str1); // str2 배열에 str1 배열의 문자 복사
printf("%s, %s\n", str1, str2);
return 0;
}
char형 배열에 문자열을 대입하는 경우에는 strcpy 함수가 훌륭히 수행한다. scanf 함수의 경우char형 배열에 문자열을 입력할 수 있지만, 중간에 빈칸이 있는 경우 빈칸 전까지만 값을 입력한다.
따라서 빈칸을 포함할 수 있는 새로운 문자열 입력 방식이 필요하다. 이때 put함수와 get함수를 활용할 수 있다.
#include <stdio.h>
int main(void)
{
char str[80];
printf("문자열 입력 : "); // 입력 안내 메시지 출력
gets(str); // 빈칸을 포함한 문자열 입력
puts("입력된 문자열 : "); // 문자열 상수 출력
puts(str); // 배열에 저장된 문자열 출력
return 0;
}
gets 함수는 문자열 입력 중간에 빈칸이나 탭 문자를 사용할 수 있으며, Enter을 누르기 전까지의 전체를 하나의 문자열로 배열에 저장한다. 문자열 마지막에 널문자를 입력하여 문자열의 끝에 표시한다.
그러나! gets 함수는 입력할 배열의 크기를 검사하지 않으므로 배열의 크기보다 더 긴 문자열을 입력하면 메모리 영역을 침범할 수 있다는 것이다.