Get Next Line 과제를 위한 사전지식을 적은 글입니다. 정적변수에 대해 이야기하겠습니다.
#include <stdio.h>
#include "get_next_line.h"
char *mini_keep_bufs(char *str) {
static char *backup;
char *new_backup;
// new_backup의 길이를 구하기
size_t len = ft_strlen(backup) + ft_strlen(str);
if (!(new_backup = (char *)malloc(sizeof(char) * (len + 1))))
return (NULL);
// new_backup에 backup 값과 새로운 값 복사
size_t idx = ft_strlcpy(new_backup, backup, len + 1);
ft_strlcpy(new_backup + idx, str, len + 1);
// backup이 new_backup을 가리키도록 설정
free(backup);
backup = new_backup;
return (backup);
}
int main(void) {
printf("%s\n", mini_keep_bufs("Hello 42"));
printf("%s\n", mini_keep_bufs(" world, "));
printf("%s\n", mini_keep_bufs("yekim!"));
return (0);
}
// 실행 결과
// Hello 42
// Hello 42 world,
// Hello 42 world, yekim!
static char *backup="";
...
if (ft_strlen(backup) != 0)
free(backup);
...
시작할때 backup이 아무것도 없으면 strlen에서 에러가 뜨네요.
실제 실행할 때는 위 2부분을 수정하시면 됩니다.