폭 제한 없는 scanf 문자열 입력

폭 제한 없는 scanf 문자열 입력

설명

scanf 계열 %s 또는 스캔셋 변환에 폭 제한이 없으면 입력이 목적지 버퍼를 초과할 수 있습니다.

잠재적 영향

  • 스택 버퍼 오버플로, 크래시, 코드 실행 가능성이 있습니다.

해결 방법

포맷 문자열에 목적지 버퍼보다 작은 폭을 지정하거나 fgets를 사용하세요.

예시

변경 전

c
char name[16];
scanf("%s", name);

변경 후

c
char name[16];
scanf("%15s", name);

설명:

  • 변경 전: %s에 입력 폭 제한이 없습니다.
  • 변경 후: 종료 문자 공간을 남기도록 16바이트 버퍼에 최대 15자의 입력 폭을 지정합니다.

참조