Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 지베르니
- 서울42
- 42 libft
- 포르투갈 여행
- 와인선별방법
- ecole42
- str함수
- ft_printf
- 에꼴42
- 파리 피크닉
- 지베르니 계절 추천
- pipex 42
- 와인 고르기
- so_long
- 42
- 42 pipex
- 이지젯
- get_next_line
- libft
- 지베르니 여름
- 굿노트 스티커
- get next line
- push swap
- 지베르니 가을
- pipex
- push swap 설명
- gnl
- 42 so_long
- 알고리즘 기초
- printf
Archives
- Today
- Total
뇌 마음 반반저장소
[42_GNL] 코딩하기 본문
728x90
이제 구조를 디자인했으니 코딩을 해보자.
1. 전체 문자열을 버퍼에 저장한다.
- fd의 문자열을 저장할 수 있는 buffer_size의 지역변수를 만든다.
- buffer_size 만큼의 영역을 malloc으로 buf에 저장한다.
- read로 문자열을 불러온다.
- 메인함수에 있는 static변수인 save와 buf 두 문자열을 strjoin으로 붙여 save에 저장한다.
- buf는 문자열을 free로 해제하고 save를 반환한다.
2.'\n'을 찾아 그 앞까지 저장한다.
- save를 불러와 \n이 나오기 전까지 루프를 돌려 단어의 개수를 알아낸다.
- 프린트될 라인 new_line을 malloc으로 (단어의 개수 + \n + \0)의 공간을 만들어 준다.
- 그리고 새로운 라인에 \n전까지 저장해 주고
- \n를 따로 저장해 주고
- \0를 저장한 뒤 반환한다.
3.'\n'뒤에서부터 끝까지 다시 다 저장한다.
- save를 불러와 \n이 나올 때까지 루프를 돌려준다.
- malloc으로 (전체 길이 - 루프 문자의 길이 + \0)의 공간을 만들어준다.
- 새로 저장할 문자열 new_save에 \n이후의 문자열을 착착 저장해 준다.
- 다 쓴 save는 free 해준다.
- new_save를 반환해 준다.
4.new_line을 리턴한다.
가장 애를 먹었던 게 strjoin을 다시 구현하는 것이었다. s1 문자열이 '\0'로 들어올 때가 있는데 그 예외처리를 해주지 않으면 시작도 안 한다. (왜냐하면 처음 save는 텅 비어있기 때문..!)
728x90
'42 > get_next_line' 카테고리의 다른 글
[42_GNL] 구조 파헤치기 (0) | 2022.12.20 |
---|---|
[42_GNL] get_next_line 개념 이해하기 (open, read, 버퍼사이즈) (0) | 2022.12.19 |
[42_GNL] 시작하며 (0) | 2022.12.18 |
Comments