마음의 안정을 찾기 위하여 - 사용하면 안되는 gets
2403899
259
589
관리자새글쓰기
태그위치로그방명록
별일없다의 생각
dawnsea's me2day/2010
색상(RGB)코드 추출기(Color...
Connection Generator/2010
최승호PD, '4대강 거짓말 검...
Green Monkey**/2010
Syng의 생각
syng's me2DAY/2010
천재 작곡가 윤일상이 기획,...
엘븐킹's Digital Factory/2010
사용하면 안되는 gets
리눅스/리눅스 프로그래밍 | 2010/05/11 13:06
리눅스 프로그램에서 "gets" 함수를 사용하여 콘솔로부터 입력을 받는 프로그램을 만들때, GCC 컴파일러에서는 아래와 같은 오류 메시지를 보여준다.

warning: the 'gets' function is dangerous and should not be used.

gets 함수의 사용이 위험하며 사용하지 말것을 경고하는 문구인데, 프로그램 동작에는 큰 영향(?)을 주지 않으므로, 무시하고 사용할 수 있다.

하지만 gets 함수를 사용하는 프로그램은 보안상에 취약점이 있을 수 있으므로 해당 함수를 fgets로 대체하여 사용할것을 메뉴얼에서 공지하고 있다.

버그
       결코 gets()를 사용하지 마라. gets()가  얼마나 많은 문자를 읽어들일 지사전에 알 수 없고, 그로 인해 gets()가 버퍼의 용량을 넘어서는 범위에 문자를 저장할 위험이 있다. 그러므로 gets()를 사용하는 것은 컴퓨터 보안에 치명적인 타격을 줄 수 있다.  (버퍼 오버 플로우를 이용한 해킹이 가능하다. - 역주) 대신 fgets()을사 용 하는 것이 좋다.
 
       여 기에서 설명한 함수의 입력 스트림을  stdio 라이브러리의 로우-레벨 시스템 콜인 read()의 파일 디스크립터와 공유해서사용하는 것은 결코 추천할 만한 일이 아니다.  그 결과가 정의되어 있지 않아서 의도하지 않은 방향으로 동작할 가능성이 크기 때문이다.


BUGS
       Never use gets().  Because it is impossible to tell without knowing the data in advance how many  characters  gets()  will  read,  and  because gets() will continue to store characters past the end of the buffer, it is extremely dangerous to use.  It has  been  used  to  break  computer security.  Use fgets() instead.

따라서 gets를 프로그램에서 사용하고 있다면 fgets로 바꾸기를 바란다.

char *fgets(char *s, int size, FILE *stream);

콘솔로부터 문자열을 입력받는 형태이므로 FILE stream을 "stdin"으로 지정해주면 된다.


2010/05/11 13:06 2010/05/11 13:06
Article tag list Go to top
View Comment 1
Trackback URL :: 이 글에는 트랙백을 보낼 수 없습니다
From. 구차니 2010/05/11 14:24
답글달기삭제
아! fgets를 어떻게 gets 대용으로 쓰지? 했는데 생각을 해보니 stdin으로 하면 되는군요 -ㅁ-!
PREV : [1] : NEXT
 
 
 
 
: [1] ... [265][266][267][268][269][270][271][272][273] ... [1323] :
«   2024/12   »
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        
전체 (1323)
출판 준비 (0)
My-Pro... (41)
사는 ... (933)
블로그... (22)
My Lib... (32)
게임 ... (23)
개발관... (3)
Smart ... (1)
Delphi (93)
C Builder (0)
Object... (0)
VC, MF... (10)
Window... (1)
Open API (3)
Visual... (0)
Java, JSP (2)
ASP.NET (0)
PHP (6)
Database (12)
리눅스 (29)
Windows (25)
Device... (1)
Embedded (1)
게임 ... (0)
Web Se... (2)
Web, S... (21)
잡다한... (7)
프로젝트 (0)
Personal (0)
대통령... (13)
Link (2)