본문 바로가기
c언어

c언어 동적 메모리 이용해서 여러가지 문제 풀어보기(10개의 문자열을 저장하는 동적 메모리 할당 받기, 동적 구조체 배열을 이용한 영화 관리 프로그램 만들기)

by 개발자 L 2023. 2. 28.
반응형

c언어 동적 메모리 이용해서 여러 가지 문제 풀어보기(10개의 문자열을 저장하는 동적 메모리 할당받기, 동적 구조체 배열을 이용한 영화 관리 프로그램 만들기)

네 안녕하세요, 이번 포스팅에서는 지금까지 배웠던 동적 메모리를 이용해서 여러가지 문제들을 풀어보도록 하겠습니다.

동적 메모리는 정말 중요한 프로그래밍 요소이기 때문에 가벼이 넘겨서는 안되니,

잘 연습하시기 바랍니다.

그럼 지금부터 시작하도록 하겠습니다.

 

1. 10개의 문자열을 저장하는 동적 메모리 할당받기

먼저 해볼 것은 10개의 문자열을 저장하는 동적 메모리를 할당받는 것입니다.

모든 글자는 'test string'으로 초기화를 시킬 것입니다.

그럼 바로 보여드리도록 하겠습니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char *list[10];

    for(int i = 0; i < 10; i++)
    {
        list[i] = (char *)malloc(100 * sizeof(char));

        if(list[i] == NULL)
        {
            printf("malloc() 실패\n");

            exit(1);
        }

        strcpy(list[i], "test string");
    }

    for(int i = 0; i < 10; i++)
    {
        printf("문자열 %d = %s\n", i, list[i]);
    }

    free(list);

    return 0;
}

이제 결과를 보여드리도록 하겠습니다.

문자열 0 = test string
문자열 1 = test string
문자열 2 = test string
문자열 3 = test string
문자열 4 = test string
문자열 5 = test string
문자열 6 = test string
문자열 7 = test string
문자열 8 = test string
문자열 9 = test string

결과도 잘 나오는 것을 확인할 수 있습니다.

반응형

 

2. 동적 구조체 배열을 이용한 영화 관리 프로그램 만들기

이번에는 영화 관리 프로그램을 만들 것입니다.

그냥 정적 배열을 이용하면 간단하지만,

메모리를 유동적으로 쓸 수 없어서 좀 더 상위 버전의 방법이라고 생각하시면 됩니다.

그럼 바로 시작해 보도록 하겠습니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct movie
{
    char title[100];
    double rating;
}MOVIE;

int main()
{
    MOVIE *movies;
    int size, i;

    printf("몇 편이나 저장하시겠습니까?");
    scanf("%d", &size);
    getchar();

    movies = (MOVIE*)malloc(sizeof(MOVIE));

    if(movies == NULL)
    {
        printf("동적 메모리 할당 오류\n");

        exit(1);
    }

    for(int i = 0; i < size; i++)
    {
        printf("영화 제목 : ");
        gets_s(movies[i].title, 100); // 영화 제목에는 빈칸이 있을 수 있음.
        
        printf("영화 평점 : ");
        scanf("%lf", &(movies[i].rating));
        getchar(); // 엔터기 제거
    }

    printf("====================\n");
    printf("제목 평점\n");
    printf("====================\n");

    for(i = 0; i < size; i++)
    {
        printf("%s \t %f", movies[i].title, movies[i].rating);
    }

    printf("====================\n");

    free(movies);

    return 0;
}

이제 결과를 보여드리도록 하겠습니다.

몇 편이나 저장하시겠습니까? 1
영화 제목 : 저스티스 리그
영화 평점 : 9.0
====================
제목    평점
====================
저스티스 리그    9.000000
====================

문제없이 나옴을 확인할 수 있습니다.

 

여기까지 c언어에서 쓰이는 요소들을 알아봤습니다.

c언어 기본에 관한 마지막 포스팅까지 읽어주셔서 너무 감사드리고,

다음에 더 좋은 콘텐츠를 들고 찾아뵙도록 하겠습니다.

다시 한번 감사드립니다~

반응형

댓글