C C++

[C | C++] scanf, gets, fgets 함수의 차이점

Posted by DHniyeo Blog on September 16, 2023

🐿️ 기본적으로 0000(엔터) 를 입력했을 시

  • scanf() : 문자열 입력시 엔터 전까지 0000 문자열을 가져오고, 마지막에 \0 (문자열의 끝을 알려주는 널문자)을 가져 온다. 또 공백이 나오면 공백 이전까지 저장되고 마지막에 \0 문자를 붙여준다.

    0000(엔터) - - - - > 0000\0

  • gets() : 0000(엔터) 줄바꿈 문자열까지 가지고 온다. 그 후에 \n(줄바꿈문자)를 \0(널문자)로 바꿔준다.

    0000(엔터) - - - - > 0000\n - - - - > 0000\0

  • fgets() : gets()와 마찬가지로 0000(엔터) 까지 가지고 온다. 그 후에 \0(널문자)를 추가로 마지막에 덧붙인다.

    0000(엔터) - - - - > 0000\n\0

문자열을 키보드로 입력 할 때 문자열이 바로 변수에 들어가는 것이 아니라 버퍼에 들어간다.

그리고 버퍼에서 3가지 함수에 따라서 버퍼에 들어있는 문자열을 가져오게 된다.

우리가 하나의 프로그램에서 여러가지 입력 함수를 이용해 문자열 입력을 여러 번 할 때 문제가 발생 할 수 있다. 왜냐하면 scanf()함수는 \n(줄바꿈문자)를 버퍼에 남기고 가기 때문에, 다음에 입력 함수가 쓰인다면 입력 함수가 버퍼에 남아 있는 \n만을 가져올 수도 있기 때문이다.

해당 문제를 해결 하는 방법은 다음 페이지를 참고하면 된다.

https://dhniyeo.github.io/program language/2023/09/16/C-C++-scanf()-사용-시-입력-버퍼에-n-남는-문제-해결-방법/