Coding/C

[C언어] 문자열 사용하기- 코딩도장

GunP4ng 2024. 1. 12. 22:58

[코딩도장] 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;
}