[초보 Linux] gets() function을 사용하는데 경고 메시지가..

mutant의 이미지

#include <stdio.h>
#include <stdlib.h>
.....

{
char intext[100];
..
gets(intext);
..

}

]# gcc -o a.out quickrelpy.c
....
:the 'gets' function is dangerous and should not be used.
...
안녕하세요..
위와 같은 메시지가 나오네요..
어떤 문제가 있는 것인가요 ??
아무리 생각해봐도 잘 모르겠습니다...
Linux programming이 아무리 처음이라 해도 VC++로 똑같이 코딩하고
컴파일하면 아무런 문제가 없습니다..
아시는분 답변 부탁드립니다..

감사합니다..

aero의 이미지

gets로 입력받은 문자열이
배열로 선언한길이 보다 길게 되면 딴 메모리영역을 침범해서
버퍼오버플로우가 발생하여 보안상 취약점이 발생할 수 있기
때문에 경고가 뜨는겁니다.

advanced의 이미지

fgets() 를 대신 사용하세요

fgets 는 바운드 체크를 해서 안전하답니다

- advanced -

sorcerer의 이미지

현재 C 표준 함수 중에서 위험성이 높은 것들은 자체적으로 사용하지 말라고 경고를 내보냅니다. gets()역시 그 중 하나이지요.
다른 분들이 적은 내용처럼 보다 안전한 다른 함수를 사용하는 것이 좋습니다.
vc++에서는 그러한 제약같은걸 별로 언급하지 않아서 그냥 넘어갑니다.
C++만 해도

include <iostream.h>

int main( void )
{
  cout << "hello\n";
  return 0;
}

이렇게만 해도 바로 마구마구 이상한 메시지 뜨지요. VC++에선 아무말 없구요.

SOrCErEr

mutant의 이미지

:D
많은 도움이 되었습니다.