① whlie문을 활용해볼까요.
1) 사용자가 Ctr - z를 눌러 EOF를 입력할 때까지 최대 MAX_LINES 만큼의 문자열을 입력받음
2) EOF인 경우 gets()의 return은 NULL이다.
② gets_malloc()을 사용해볼까요.
- 불필요한 메모리 사용을 줄이기 위해 문자열 입력을 위한 버퍼를 동적으로 할당.
※ gets_malloc()
- gets() 함수의 문자열을 입력 받을 버퍼를 malloc()으로 동적 할당
- 입력이 EOF이면 동적으로 할당 받ㅇ느 버퍼를 해제하고 NULL 을 Return
문자열 입력 버퍼
- 동적으로 할당 받는 문자열 입력 버퍼들을 관리하기 위한 문자열 포인터 배열 str_ptrs[]선언하고 NULL값으로 초기화
- 실제 입력 LINE 수에 해당하는 문자열 버퍼만 할당
- 동적으로 할당 받는 버퍼들은 더이상 사용하지 않으면 free()를 통해 해제 하여야 함
③ gets_realloc()을 사용해볼까요.
gets_malloc(): 만약 입력받은 문자열의 길이가 MAX_LINE_LEN보다 작을 경우 메모리가 낭비될 수 있다.
gets_realloc()
- gets_malloc()의 메모리 낭비를 제거하기 위해 입력받은 문자열의 길이에 맞추어 문자열 버퍼의 크기를 줄임
- 동적으로 할당 받은 메모리의 크기를 변화시켜 재할당하는 realloc()기능을 활용
- NULL 문자를 보호하기 위해 새로운 버퍼의 크기는 문자열 길이 + 1로
'Language Study > C' 카테고리의 다른 글
[C/C++] 10 - 04 파일 입출력 기초 (0) | 2022.12.14 |
---|---|
[C/C++] 10 - 03 Lifetime 분류 (1) | 2022.12.14 |
[C/C++] 10 - 01 메모리 동적 할당 (1) | 2022.12.06 |
[C/C++] 09 - 03 구조체 배열과 포인터 (0) | 2022.12.03 |
[C/C++] 09 - 02 구조체 변수와 함수, 포인터 (0) | 2022.11.24 |