C에서는 String을 character array로 처리하기 때문에 분명 다른언어보다 문자열 처리가 어려운 반면에 Low Level의 문자처리가 가능한 장점이 있다.
보통 C에서 쓰이는 gets()함수는 New Line Character ('\n')까지 글자를 받아들일 수 있는 장점이 있지만 Character Array의 저장공간이 넘어서 메모리에 까지 Character을 저장하기 때문에 주로 BOF Hacker의 공격대상이 된다. 이에 대한 버그를 수정하고 char을 array가 아니라 pointer로 처리하여 메모리의 낭비를 적게한 gets함수를 나름대로 수정해 보았다.
/* 입력된 글자가 저장되어 있는 양만큼의 메모리 포인터를 return */
/* Argument에 입력된 integer pointer에 입력된 문자의 수 return */
char *get_line2mem(int *char_num) {
int n = -1;
char temp;
char *input;
while(1) {
temp = getch_linux();
input = realloc(input, ++n * sizeof(char));
input[n] = temp;
if(temp == '\n') {
input[n] = '\0';
break;
}
}
*char_num = n;
return input;
}