프로그래밍

 3198, 1/160 회원가입  로그인  
   kumi123
   오버플로우에 대해서

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6275 [복사]


문자열 함수중..  gets는 오버프로우가 일어나는 것을 확인 했습니다.

그렇다는 것은

다른 문자열 함수

strcat , strcpy 등도 가능 하단 건데
저는 strcpy 만 시도를 해 보았지만

#include <stdio.h>
#include <string.h>

int main()
{
    char a=1;
    char str[10];
    char str2[20];
    
    fgets(str2, sizeof(str2), stdin);
    
    strcpy(str, str2);
    
    printf("str2: %s\n", str2);
    printf("str : %s\n", str);
    printf("a: %d\n", a);
    
    system("pause");
}

컴파일 결과,

이상이 없습니다.

gets는 되는데 나머지는왜안되는 건가요?

  Hit : 3992     Date : 2012/11/24 03:31



    
qkrwncks593 fgets 는 문자열 길이를 검사하도록 추가로 인자를 넣기때문에 오버플로우가 발생하지 않습니다 ::)
strcpy 함수는 두번째 인자의 문자열 널문자를 만날때까지 반복해서 복사합니다.

하지만 strcpy 는 컴파일러마다 다릅니다. gcc 컴파일러에서는 오버플로우가 발생하지만 VC 계열의 컴파일러는
오버플로우 발생을 막고있는거 같습니다.
2013/01/03