C language Chapter 4. C언어의 입출력

2020. 3. 17. 12:30·언어/C,C++

안녕하세요

 

저번에는 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

 


이상으로 글을 마치겠습니다.

 

잘못된 부분이 있으면 알려주시면 감사하겠습니다

 

 

출처

더보기

https://docs.microsoft.com/ko-kr/cpp/c-runtime-library/reference/printf-printf-l-wprintf-wprintf-l?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15.query%3FappId%3DDev15IDEF1%26l%3DKO-KR%26k%3Dk(STDIO%2Fprintf);k(printf);k(DevLang-C%2B%2B);k(TargetOS-Windows)%26rd%3Dtrue&view=vs-2019

 

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

https://docs.microsoft.com/ko-kr/cpp/c-runtime-library/reference/scanf-scanf-l-wscanf-wscanf-l?view=vs-2019

 

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
'언어/C,C++' 카테고리의 다른 글
  • C Language Chapter 6. 반복문
  • C language Chapter 5. C언어의 조건문(+switch문)
  • C language Chapter 3. C언어의 변수와 자료형
  • C language Chapter 2. C언어 개발환경
깜냥c
깜냥c
게임 개발/클라이언트/AI/PS/기타 연구
  • 깜냥c
    Choice Program
    깜냥c
  • 전체
    오늘
    어제
    • 분류 전체보기 (58)
      • 언어 (11)
        • C,C++ (9)
        • C# (1)
        • Python (1)
      • PS (20)
        • 백준 문제 (19)
        • 알고리즘 (1)
      • 인공지능 (2)
      • 게임제작 (7)
      • 게임개발 (15)
        • Unity (8)
        • Unreal Engine (5)
        • Godot Engine (1)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 블로그 소개
  • 링크

    • 김병장의 IT 블로그
    • 식품영양과 데이터사이언스
  • 공지사항

  • 인기 글

  • 태그

    Godot
    BOJ
    백준
    C언어
    Unreal
    C++
    배낭 문제
    UE5
    입출력
    unity
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
깜냥c
C language Chapter 4. C언어의 입출력
상단으로

티스토리툴바