// 문제가 될수 있는 소스 //////////////////////
#include<stdio.h>
void main()
{
char Name[5];
char Addr[5];
char TelNo[5];
printf("이름 : ");
gets(Name);
printf("주소 : ");
gets(Addr);
printf("전화 : ");
gets(TelNo);
printf("이름 : %s\n", Name);
printf("주소 : %s\n", Addr);
printf("전화 : %s\n", TelNo);
}
// 결과 화면 //////////////////////////////
※ gets() 는 버퍼 오버플로우 검사를 하지 않기때문에
사용자가 배열의 크기를 알고 있지 못하다면,
다른 배열의 영역을 침범하기 쉽다.
// 문제를 수정한 소스 //////////////////////
#include<stdio.h>
#include<malloc.h>
#include<string.h>
void main()
{
char *Name;
char *Addr;
char *TelNo;
char temp[1024];
printf("이름 : ");
gets(temp);
Name = (char*)malloc(sizeof(temp)+1);
strcpy(Name , temp);
printf("주소 : ");
gets(temp);
Addr = (char*)malloc(sizeof(temp)+1);
strcpy(Addr , temp);
printf("전화 : ");
gets(temp);
TelNo = (char*)malloc(sizeof(temp)+1);
strcpy(TelNo , temp);
printf("이름 : %s\n", Name);
printf("주소 : %s\n", Addr);
printf("전화 : %s\n", TelNo);
}