C언어를 공부할 때 scanf() 함수를 학습할 것이다.
scanf() 함수는 C언어에서 키보드를 이용해 문자열을 입력받는 함수이다.
하지만, 현재의 Visual Studio 에서 사용시 권장사용은 아니지만 부득이 사용하는 경우 `#define _CRT_SECURE_NO_WARNINGS` 코드를 사용하거나 또는 권장하는 함수를 사용하는 것이 바람직하다.
거두절미하고, 여기서는 scanf() 함수를 사용하여 키보드를 사용한 문자열을 입력하고 입력한 문자열을 화면에 출력하도록 한다.
1. C언어의 scanf() 함수
- 키보드를 사용한 문자열 입력
scanf() 함수는 C언어에서 사용하는 표준 입력 함수이다.
키보드를 사용하여 문자열을 입력받아 컴퓨터에 명령을 내릴 수 있다.
과거 옛날의 모든 프로그램들을 보면 이러한 문자열 입력방식으로 프로그램을 구동하고, 시스템을 만들고 처리했다.
지금도 볼 수 있는 대표적인 문자열 입력 기능은 터미널 또는 콘솔 화면이다.
2. scanf() 기본 문법
C언어에서 scanf() 함수가 어떻게 사용되는지 기본 문법을 살펴보자.
scanf() 함수에는 `형식지정자와 변수주소`를 인자로 받아 사용하며, 형식지정자는 데이터의 형태, 변수주소는 배열 변수명으로 간단히 생각할 수 있다.
scanf("형식지정자", 변수주소);3. 예제 코드
scanf() 함수가 C언어에서 키보드를 이용한 문자열 입력을 할 수 있다고 언급하였다.
이제 코드에서 어떻게 사용되는지 살펴 본다.
동작의 구조를 위해 scanf() 함수가 사용되는 곳은 별도의 함수로 작성하였다.
단, 해당 코드에서 주목할 부분이 있는데 `#define _CRT_SECURE_NO_WARNINGS`이다.
`#define _CRT_SECURE_NO_WARNINGS` 은 Visual Studio 에서 보안 경고를 무시하는 지시자이다.
지금의 Visual Studio에서 보안 경고에 해당하는 코드가 있다면 컴파일 단계에서 경고를 하게 되고, 컴파일을 중단하지만, `#define _CRT_SECURE_NO_WARNINGS` 사용시 무시되고 컴파일을 진행한다.
Visual Studio 에서 C언어 사용시 scanf() 함수는 안전하지 않은 보안 취약점이 발견된 후, 컴파일 단계에서 unsafe 경고와 컴파일이 중단되지만 `#define _CRT_SECURE_NO_WARNINGS` 사용하면 경고는 무시되고 scanf() 함수를 그대로 사용할 수 있다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
/* 함수 선언 */
void CallScanf(void);
/* 프로그램 시작 */
int main(void)
{
printf("\n----- Start 05-Scanf function \n\n");
/* 프로그램 종료 */
CallScanf();
printf("\n----- End \n\n");
/* 정상 종료 */
return 0;
}
void CallScanf(void)
{
char name[255] = "";
printf("너의 이름은~? 君の名は~? \n");
printf("=> ");
scanf("%s", name);
printf("%s", name);
}위의 코드에서 주목할 부분은 CallScanf() 함수이다.
CallScanf() 함수의 역할은 사용자가 키보드로 입력한 문자열을 읽고, 화면에 읽은 문자열을 출력한다.
중요한 코드는 다음과 같다.
- #define _CRT_SECURE_NO_WARNINGS
- Visual Studio 에서 scanf() 함수 보안 경고 무시 - char name[255] = "";
- 문자 배열 255 공간 확보, 빈 문자열로 초기화 - scanf("%s", name)
- 키보드로 입력한 문자열 저장.
4. 실행 결과
이제 위의 코드에 대한 실행 결과는 다음과 같다.
코드를 실행하면 printf() 함수를 사용해 질문을 받기 위한 문자열이 출력된다.
여기서는 이름을 받도록 한다.
scanf() 함수가 실행되며 키보드로 문자열을 입력받기 위한 커서가 깜빡 거리는 것을 볼 수 있다.
커서가 깜빡이는 상태에서 문자열을 입력하고 키보드의 엔터를 치면 입력한 문자열이 출력되는 것을 볼 수 있다.


댓글
댓글 쓰기