안녕하세요
저번에는 C언어의 변수와 자료형에 대해서 배웠습니다.
이번 글은 기본적인 C언어의 입출력에 관해서 알아보도록 하겠습니다
C언어에서 입출력 할 때는 입출력 함수를 이용합니다.
주로 printf, scanf(scanf_s)를 쓰며 getc, puts과 같은 함수도 쓰입니다.
먼저 출력 함수에 대해서 알아보겠습니다.
1. Printf
printf는 문장 혹은 변수 값을 출력할 수 있습니다.
printf의 정의는 다음과 같습니다.
int printf( const char *format [, argument]... );
format - 문자, 형식 지정자, 이스케이프 시퀀스 등을 작성
argument - 인수
문장을 출력할 경우 printf("내용"); 과 같이 쓰면 됩니다.
만약 a라는 정수형 변수를 출력하고 싶으시면 printf("%d", a) 같이 쓰면 됩니다.
여기서 변수를 출력할 때는 '%d'와 같이 어떤 변수를 출력할 것인지 컴퓨터에게 알려주어야 하는데 이것을 형식 지정자라고 합니다.
형식 지정자는 C language Chapter 3. C언어의 변수와 자료형 에서 표로 정리했었습니다.
표에 나오지 않은 형식 지정자 중에 %s와 같은 문자열 형식과 %x와 같은 16진수 형식도 있습니다.
2. scanf(scanf_s)
scanf는 사용자로부터 값을 입력 받을 수 있습니다.
scanf의 정의는 다음과 같습니다.
int scanf( const char *format [, argument]... );
format - 형식 지정자 작성
argument - 인수
변수를 받을 경우 scanf("%d",&a); 같이 쓰면 됩니다.
문장을 입력 받을 경우에는 char b[15]; 같이 배열을 이용해 문자열을 만들고 scanf("%s",b); 이렇게 쓰면 됩니다.
배열에 관해서는 추후에 다루도록 하겠습니다.
*scanf 오류와 scanf_s
Visual Studio에서 scanf를 쓰게 되면 다음과 같은 오류가 뜹니다.
C4996 오류는 더 이상 사용되지 않는, 안전하지 아니한 함수를 사용할 경우 나타납니다.
이러한 경우 다른 함수로 대체해서 쓰는 것이 좋겠지만, 경고를 무시하고 사용할 수도 있습니다.
사진에 보이는 것처럼 _CRT_SECURE_NO_WARNINGS을 사용하는 방법이 있습니다
방법은 int main() 부분 전에 #define _CRT__SECURE_NO_WARNINGS을 적으시면 됩니다.
#include <stdio.h>
#define _CRT__SECURE_NO_WARNINGS
int main()
{
//
}
혹은 소스파일의 [속성]-[구성 속성]-[C/C++]-[전처리기]-전처리기 정의 에다가 한 칸 띄고 _CRT__SECURE_NO_WARNINGS을 적으시면 됩니다.
이 방법 외에 scanf_s라는 함수를 대신 사용하여 해결할 수도 있습니다.
scanf_s는 scanf와 유사한데 버퍼의 크기를 인수로 넣어줘야 한다는 차이점이 있습니다.
scanf("%s",b); --> scanf_s("%s",b,30); 간단하게 표현하면 이렇게 쓸 수 있습니다.
쉽게 말해 문자열의 길이를 제한해줘야 한다는 것입니다.
이렇게 하는 이유는 버퍼 오버런, 버퍼 오버플로우를 예방하기 위해 이렇게 쓰는 것입니다.
버퍼 오버플로우란 데이터를 저장할 때 내가 지정한 버퍼 바깥 쪽에 저장되는 것을 의미하며 이로 인해 잘못된 동작이 야기됩니다.
자세한 내용을 링크를 참조해주세요
https://ko.wikipedia.org/wiki/%EB%B2%84%ED%8D%BC_%EC%98%A4%EB%B2%84%ED%94%8C%EB%A1%9C
버퍼 오버플로 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 다른 뜻에 대해서는 오버플로 문서를 참조하십시오. 버퍼 오버플로(영어: buffer overflow) 또는 버퍼 오버런(buffer overrun)은 메모리를 다루는 데에 오류가 발생하여 잘못된 동작을 하는 프로그램 취약점이다. 컴퓨터 보안과 프로그래밍에서는 프로세스가 데이터를 버퍼에 저장할 때 프로그래머가 지정한 곳 바깥에 저장하는 것을 의미한다. 벗어난 데이터는 인접 메모리를 덮어 쓰게 되며 이때 다른 데이터가 포함되
ko.wikipedia.org
이상으로 글을 마치겠습니다.
잘못된 부분이 있으면 알려주시면 감사하겠습니다
출처
printf, _printf_l, wprintf, _wprintf_l
printf, _printf_l, wprintf, _wprintf_lprintf, _printf_l, wprintf, _wprintf_l 이 문서의 내용 --> 서식이 지정된 출력을 표준 출력 스트림에 인쇄합니다.Prints formatted output to the standard output stream. 이러한 함수의 더 안전한 버전을 사용할 수 있습니다. printf_s, _printf_s_l, wprintf_s, _wprintf_s_l를 참조하세
docs.microsoft.com
scanf, _scanf_l, wscanf, _wscanf_l
scanf, _scanf_l, wscanf, _wscanf_lscanf, _scanf_l, wscanf, _wscanf_l 이 문서의 내용 --> 표준 입력 스트림에서 형식이 지정된 데이터를 읽습니다.Reads formatted data from the standard input stream. 이러한 함수의 더 안전한 버전을 사용할 수 있습니다. scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l을 참조하세요.More secure
docs.microsoft.com
'언어 > C,C++' 카테고리의 다른 글
C Language Chapter 6. 반복문 (0) | 2020.08.03 |
---|---|
C language Chapter 5. C언어의 조건문(+switch문) (0) | 2020.04.17 |
C language Chapter 3. C언어의 변수와 자료형 (0) | 2020.01.19 |
C language Chapter 2. C언어 개발환경 (2) | 2020.01.09 |
C language Chapter 1. C언어를 알아보자! (0) | 2019.12.31 |