본문 바로가기

42cursus/get-next-line4

개행으로 끝나느냐, 개행으로 끝나지 않느냐 hi, hello('\n') hi, wins // hi, hello('\n') hi, wins('\n') // 두 문단을 gnl로 읽었을 때 차이점은 line의 맨마지막줄이 '\0'로 끝나는지 아닌지 차이 #include "get_next_line_bonus.h" #include #include int main() { int fd; int ret; char *line; fd = open("./test", O_RDONLY); while ((ret = get_next_line(fd, &line)) > 0) { printf("%s\n",line); free(line); } printf("%s\n",line); free(line); return(0); } main.c 함수로 실행시켜보면, 마지막에 한줄에 '\0.. 2020. 7. 22.
get_next_line(bonus) 이중배열과 배열 포인터에 대한 이해 gnl의 bonus를 진행하기 위해서는 이중배열 char buffer[fd][BUFFER_SIZE + 1]을 memset할 수 있어야했다. -> 가능하다.!! (이중배열을 써야하는 건가? (BUFFER_SIZE+1) * fd 이면 값이 꽤나 많이 클 것으로 예상됨) char buffer_double[5][20]; memset(buffer_double[1], 0, 20); printf("&buffer_double[2][0] p : %p\n", &buffer_double[2][0]); printf("&buffer_double[2] p : %p\n", &buffer_double[2]); printf("buffer_double[2][0] p : %p\n", buffer_dou.. 2020. 7. 11.
get_next_line(mandatory) 1.BUFFER_SIZE는 내가 가지고 있는 양푼의 크기. 한줄에 얼마나 많은 글자가 들어가있을지 알 수 없기 때문에 동적할당으로 해결해야한다고 생각했다. 2.Static value를 전역변수처럼 사용하고 있음. 구현방법 1.(sujung, kylee) buffer는 지역변수로 두고, get_next_line함수에서 개행이전까지는 return하고, 개행이후에 string은 동적할당으로 저장해둔다. -> 일회용 주사기로(buffer)에 피를 빨고, 100ml 정량은 내보내고(*line = ft_strdup(sub_buffer)), 나머지양은 임시 저장해둔다(함수에서 계속 쓰기 때문에 static으로 두어야함) 구현방법 2.✅ buffer를 정적변수로 두고, buffer에 개행문자가 들어갈 경우, 그 만큼을.. 2020. 7. 2.
프로세스의 메모리, 파일 입출력함수 get_next_line을 구현하기 앞서서 문자출력에 관한 원리와 함수들을 이용해보고 장단점을 느껴본다. 1. 정적변수(wiki) "기억 장소가 콜 스택에서 할당 및 할당 해제되는, 수명이 더 짧은 자동 변수(지역 변수가 일반적으로 자동임)와는 반대되는 개념이다. 즉, 기억 장소가 힙 메모리에 동적 할당되는 객체와 반의어이다. 정적 메모리 할당은 일반적으로 관련 프로그램을 실행하기 앞서 컴파일 시간에 메모리를 할당하는 것을 일컬으며 이는 메모리가 런타임 중에 필요할 때 할당되는 동적 메모리 할당이나 자동 메모리 할당과는 다르다."[1] 위 그림에서도 보듯이, 전역변수와 정적변수는 프로그램이 끝날 때 까지 메모리가 유지된다. 둘의 차이점은 정적변수는 함수내에서만 호출하여 사용할 수 있다. 전역변수와 정적변.. 2020. 7. 1.