Language Study/C

[C/C++] 10 - 02 문자열 버퍼 동적 할당

지미닝 2022. 12. 14. 02:55

① whlie문을 활용해볼까요.

1) 사용자가 Ctr - z를 눌러 EOF를 입력할 때까지 최대 MAX_LINES 만큼의 문자열을 입력받음

2) EOF인 경우 gets()의 return은 NULL이다.

 

② gets_malloc()을 사용해볼까요.

  • 불필요한 메모리 사용을 줄이기 위해 문자열 입력을 위한 버퍼를 동적으로 할당.

※ gets_malloc()

  1. gets() 함수의 문자열을 입력 받을 버퍼를 malloc()으로 동적 할당
  2. 입력이 EOF이면 동적으로 할당 받ㅇ느 버퍼를 해제하고 NULL 을 Return

 

문자열 입력 버퍼

  • 동적으로 할당 받는 문자열 입력 버퍼들을 관리하기 위한 문자열 포인터 배열 str_ptrs[]선언하고 NULL값으로 초기화
  • 실제 입력 LINE 수에 해당하는 문자열 버퍼만 할당
  • 동적으로 할당 받는 버퍼들은 더이상 사용하지 않으면 free()를 통해 해제 하여야 함

③  gets_realloc()을 사용해볼까요.

gets_malloc(): 만약 입력받은 문자열의 길이가 MAX_LINE_LEN보다 작을 경우 메모리가 낭비될 수 있다.

gets_realloc()

  • gets_malloc()의 메모리 낭비를 제거하기 위해 입력받은 문자열의 길이에 맞추어 문자열 버퍼의 크기를 줄임
  • 동적으로 할당 받은 메모리의 크기를 변화시켜 재할당하는 realloc()기능을 활용
  • NULL 문자를 보호하기 위해 새로운 버퍼의 크기는 문자열 길이 + 1로