일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 피들러
- 파이썬
- 석문초등학교
- 자바
- 리눅스
- Linux
- 해커스쿨
- hackerschool
- 파이썬챌린지
- 리버싱
- 쏙쏙캠프
- 써니나타스
- html5
- FTZ
- ARP Redirect
- 경기대학교
- webhacking.kr
- 암호수학
- pythonchallenge
- 대외활동
- C언어
- 웹
- Web
- C
- 실습문제
- setCookie
- java
- 웹해킹
- 명품자바프로그래밍
- SuNiNaTas
- Today
- Total
Hongfluenza
서식문자와 scanf()함수 본문
[C-LAB과제 3번]
서식문자와 scanf()함수 조사
scanf()에 대한 서식문자
서식문자 | 입력대상(자료형) | 입력 형태 |
%d | int | 부호 있는 10진수 정수 |
%i | int | 부호 있는 10진수 정수 |
%u | unsigned int | 부호 없는 10진수 정수 |
%o | unsigned int | 부호 없는 8진수 정수 |
%x | unsigned int | 부호 없는 16진수 정수 |
%c | char | 문자 |
%s | char * | 문자열 |
%p | void * | 주소 값 |
%f %e %g | float | 부호 있는 실수 |
scanf() 함수에 대해 알아보자
scanf()함수는 표준 입력장치(키보드)로부터 데이터를 입력받는다.
리턴값은 성공 시 입력된 데이터 갯수, 실패 시에는 0을 리턴하게 된다.
scanf()함수는 정수, 실수, 문자, 문자열, 구조체까지 입력을 받을 수 있다.
scanf는 주소값(address)을 인자로 가진다.
따라서, 그 변수의 주소값을 반환하는 문자인 &를 변수의 이름 앞에 추가한다.
예)
scanf("%d %f", &age, &weight);
scanf의 작동원리는 공백(탭,스페이스바)이 아닌 첫 번째 글자를 읽는다.
그 이후로 입력될 수 없는 글자를 만나거나(숫자를 받는데 문자를 넣음), 폭을 지정했을 때 그 폭만큼 읽어들이고 종료한다.
%d에 0~9이외의 글자, 즉 숫자이외의 글자를 넣으면 넣어지지 않는다.
에러가 발생하게 되는데, 스페이스바는 받아들여지지 않고, 공백은 다음입력시 무시되므로
scanf("%d %d %d", &i, &j, &k);가 있을 때, [3 5 7]과 같이 띄어쓰기로 입력이 가능하다.
scanf함수는 문자열 입력시 입력받을 문자열의 최대 갯수를 제한하지 않기 때문에
버퍼 오버플로우가 발생할 여지가 충분히 있다.
이를 해결하기 위해서, fgets함수를 사용하면 된다.
※fgets 함수는 scanf와 달리 오직 개행 문자에 의해서만 입력이 끝나기 때문에
띄어쓰기가 있는 문자열도 입력 받을 수 있다.