반응형
문자열 처리하기(동적 할당)
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 |