[C언어] 문자열 사용하기- 코딩도장
[코딩도장] Unit 39 ~ 40
1. 문자열
1. 문자열 사용하기
C언어에서 문자열은 " " 를 이용하여 사용한다
char c1 = 'a';
char *s1 = "Hello";
문자는 ' ' 를 사용해서 1바이트 크기의 char 에 저장한다
문자열은 1바이트를 넘기 때문에 포인터에 저장한다
printf 로 문자열을 출력할 때는 %s 를 사용한다
C언어의 문자열은 마지막에 항상 널(NULL) 문자가 붙는다는 것이다
※ NULL 은 0으로도 표현가능하고 문자열의 끝을 나타낸다
※ 포인터로 할당한 문자열은 읽기 전용이기 때문에 수정이 불가능하다
문자열은 문자 배열에도 저장할 수 있다
char s1[10] = "Hello";
배열 요소 하나하나에 문자가 저장된다
배열이기 때문에 인덱스는 0부터 시작한다
배열을 선언하고 남는 공간에는 모두 NULL이 들어간다
배열을 선언한 즉시 문자열로 초기화를 해주어야 한다
문자열을 저장할 때 배열의 최소 크기는 Hello 5글자 + 1 이다
뒤에 NULL 문자가 붙기 때문에 문자 개수 + 1 이다
배열의 크기를 생략할 수 있다
char s1[] = "Hello";
배열의 크기를 생략하면 최소 크기로 자동으로 지정된다
위의 경우는 Hello 5글자 + 1 이므로 6이다
2. 문자열 입력받기
1. 문자열 입력받기
문자열도 scanf 를 이용하여 입력받을 수 있다
char s1[10];
scanf("%s", s1);
배열도 포인터기 때문에 변수 앞에 & 를 붙이지 않는다
문자열 뒤에 NULL 문자가 붙기 때문에
배열의 크기가 10이면 입력 받을 수 있는 문자는 9이다
포인터 형태의 문자열도 입력을 받을 수 있다
문자열 포인터에 문자열을 저장하면 읽기 전용이기 때문에 쓰기가 불가능하다
char *s1 = malloc(sizeof(char) * 10);
scanf("%s", s1);
free(s1);
따라서 malloc 함수로 메모리를 할당받고 문자열을 저장해야 한다
scanf 로 공백까지 포함해서 입력받고 싶으면 %[^\n]s 을 사용해야 한다
char s1[30];
scanf("%[^\n]s", s1); // 공백까지 포함하여 문자열 입력받기
3. 심사문제
39.8 문자열 만들기
표준 출력으로 다음과 같은 문자열이 출력되게 만드세요.
정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.
#include <stdio.h>
int main()
{
________________________
printf("%s\n", s1);
return 0;
}
정답
char s1[50] = "Beethoven\n9th\nSymphony";
40.8 문자열 네 개 입력받기
표준 입력으로 어떤 문자열 네 개가 입력됩니다(각 문자열의 길이는 30 이하). 입력된 문자열 네 개를 각각 한 줄씩 출력하는 프로그램을 만드세요(scanf 함수 호출 전에 문자열을 출력하면 안 됩니다).
정답에는 C 언어 컴파일러에서 정상적으로 컴파일되는 전체 코드를 입력해야 합니다.
정답
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
char s1[30];
char s2[30];
char s3[30];
char s4[30];
scanf("%s %s %s %s", s1, s2, s3, s4);
printf("%s\n", s1);
printf("%s\n", s2);
printf("%s\n", s3);
printf("%s\n", s4);
return 0;
}