본문 바로가기

C

[C언어] 실습: 문자열 처리하기(동적 할당)

반응형

문자열 처리하기(동적 할당)

 

step1. 문자열을 입력받기 위해서 충분한 크기의 문자 배열을 선언한다.

step2. 문자열을 입력받는다.

step3. 입력받은 문자열의 크기를 계산한 후, 그 공간만큼 동적할당받는다.

step4. 할당받은 공간에 문자열을 대입한다.


#include<stdio.h>
#include<stdlib.h>   // malloc()
#include<string.h>   // strlen(), strcpy(), strcat(), strcmp()..

int main(){

// step1. 문자열을 입력받기 위해서 충분한 크기의 문자배열을 선언한다.
   char tmp[100];   // 충분한 공간을 확보하기 위한 임시문자배열을 선언한다.
   char *str[3];    // 동적 할당을 하기 위한 포인터 배열 변수를 선언한다.

// step2. 문자열을 입력받는다.
   for(int i = 0; i < 3; i++){
      printf("문자열 : ");
      gets(tmp);                                 // gets() 함수는 입력하는 문자열 사이에 space가 가능하다.
// step3. 입력받은 문자열의 크기를 계산한 후 그 공간만큼 동적할당 받는다.
      str[i] = (char*)malloc(strlen(tmp) + 1);   // malloc()이 주소를 반환해 주기 때문에 (char*)로 형식을 지정해 주어야 한다.
                                                 // strlen()는 NULL 전까지 문자열 길이를 불러오기 때문에 '+1'을 하여 "문자열\n"로 만들어 준다.
                                                 // 문자열 길이만큼만 저장하는 공간을 확보한다.
// step4. 할당받은 공간에 문자열을 대입한다.
      strcpy(str[i], tmp);                       // gets() 함수를 통해 입력받아 tmp에 저장한 문자열을 str[i]에 복사한다.
   }

   for(int i = 0; i < 3; i++)   // 입력된 문자열을 출력한다.
      printf("%s\n", str[i]);

   for(int i = 0; i < 3; i++)   // 할당받은 메모리(3개)를 반환시켜 준다.
      free(str[i]);

   return 0;
}

 


int *array = (int*)malloc(4 * sizeof(int));

 

위와 같이 "array"라는 포인터 변수를 선언하였다.

malloc() 함수는 주소를 반환해 주기 때문에 (int*)로 형식을 지정해 주어야 하고,

int형 타입의 자료형 4개가 필요하여 "4 * sizeof(int)" 만큼의 크기를 할당해 준다.

이때 총 16byte가 필요하지만, 16byte의 공간이 없으면 더 큰 32byte 저장 공간을 찾아서 제공할 수 있다.

반응형

'C' 카테고리의 다른 글

[C언어] 문자열: strlen()  (0) 2021.05.03
[C언어] 문자열과 배열  (0) 2021.05.02
[C언어] 동적 메모리 할당 (malloc, calloc)  (0) 2021.04.29
[C언어] 이중 포인터  (0) 2021.04.28
[C언어] const  (0) 2021.04.27