C언어에서 va_start, va_arg, va_copy, va_end을 사용하려면 #include #include #include void f(int n, ...) { va_list v1; va_start(v1, n); int a; for (int i = 0; i < n; i++) { a = va_arg(v1, int); printf("%d", a); } va_end(v1); } intmain() { f(5, 1, 2, 3, 4, 5); } int n == 몇 개 가변인자를 넘겨줄 것인가. 매개변수들이 넘어올 때 int형 보다 작은 범위는 int로 double 보다 작은 범위는 double로 포인터는 void*로 넘어옴 float, char는 안 넘어감 va = variable argument va_l..
C언어
반환형이 void가 아니라 왜 int형일까? int ft_printf(const char *, ...); printf의 반환 값 == 출력하는 문자 개수(개행 포함) 예제를 통해서 확인 #include intmain() { //f(5, 1, 2, 3, 4, 5); int num = printf("aaa\\n"); printf("%d", num); } 결과 참고 블로그 [C언어] printf 함수가 반환하는 값 [C언어] printf 함수가 반환하는 값 printf 함수는 화면에 문자열을 출력하는 기능을 하는데, 그 자체로도 값을 반환합니다. printf 함수가 반환하는 값은 문자열 길이입니다. printf 함수의 반환값을 확인하는 방법은 printf 함수를 변수 bigpicture123.tistory.com
정적 변수는 2가지가 있다 외부정적변수 내부정적변수 static변수는 프로그램이 시작 될 때 할당이 되고 프로그램이 끝날 때 없어짐. 초기화가 안 되어 있으면 0으로 초기화 해주게된다. 외부 정적 변수 외부 정적 변수 초기화 #include static int count; int main() { printf("%d", count); } static변수는 프로그램이 시작 될 때 할당이 되고 프로그램이 끝날 때 없어짐. 함수가 끝날 때 파괴되는 변수가 아니기에 함수가 끝나도 그 값을 기억하고 있을 수 있다. 전역으로 선언한 static 변수는 그 소스파일 내의 모든 함수에서 사용이 가능하다. 다른 소스 파일에서 사용하지 못함. 정보은닉(정보를 숨긴다) 효과가 있음. 결론 외부 정적 변수는 전역 변수라고 생각..
get_next_line 과제에서는 open, read, close에서 read만 허용을 하는 과제입니다. read만 공부하고는 과제에 임하기 어렵다. open, read, close를 전부 알아야한다. open 참고 사이트 헤더: fcntl.h 형태: int open (const char *FILENAME, int FLAGS[, mode_t MODE]) 인수 char *FILENAME 대상 파일 이름 int FLAGS 파일에 대한 열기 옵션 [, mode_t MODE] O_CREAT 옵션 사용에 의해 파일이 생성될 때 지정되는 파일 접근 권한 반환 int 0 < 파일 열기에 성공하면 파일 디스크립터의 양의 정수 값 반환 -1 == 실패 파일을 open할 때는 용도에 따라 읽기 전용, 쓰기 전용 또는 읽..
lstdelone voidft_lstdelone(t_list *lst, void (*del)(void *)) 현재 가리키고 있는 노드를 삭제 시킴. free lst와 free content #include "libft.h" voidft_lstdelone(t_list *lst, void (*del)(void *)) { if (lst == NULL || del == NULL) return ; del(lst -> content); free(lst); } 참고 사이트 ft_lstdelone 구현 ft_lstdelone 구현 lst가 NULL이면 리스트가 비어 있다는 뜻. 이 때에는 삭제할 리스트가 없는 것이므로 return; del()함수가 NULL이면 lst의 content를 free하는 기능을 수행하지 못하..
lstnew 새로운 노드를 생성하는 함수 #include "libft.h" t_list*ft_lstnew(void *content) { t_list*result; result = (t_list *)malloc(sizeof(t_list)); if (result) { result->content = content; result->next = NULL; } return (result); } 참고 사이트 lst함수들에 대해서(lstnew, lstadd_front, lstadd_back, lst_size) lst함수들에 대해서(lstnew, lstadd_front, lstadd_back, lst_size) 틀린 내용이 있다면 댓글로 알려주세요! 감사합니다 :) 💡 lstnew 에 대하여 struct s_list ..
ft_putchar_fd 우리가 write를 쓸 때 표준 출력으로 write(1, &c, 1); 이렇게 많이 사용했음 그런데 개발자들이 사람들을 write를 쓸 때 0: 표준 에러 1: 표준 출력 2: 표준 입력 이렇게 하였고 fd가 들어온다는 말은 파일이 들어오는데 순서가 3번째로 됨 fd가 순서를 정해줌 #include "libft.h" voidft_putchar_fd(char c, int fd) { write(fd, &c, 1); } ft_putstr_fd write로 출력 #include "libft.h" voidft_putstr_fd(char *s, int fd) { inti; i = 0; while (s[i] != '\\0') { write(fd, &s[i], 1); i++; } } ft_pu..
strtrim (공백)Hello world! 가 있으면 set : H(공백)e! 첫번 째 시작 점 찾기: (첫 번째) l 끝났으니 뒤에서 부터 마지막 지점 찾기: d llo world까지 출력 char s[100] = "lorem ipsum dolor sit amet"; char set[6] = "l "; 결과값 :orem ipsum dolor sit amet char s[100] = " lorem ipsum dolor sit amet "; char set[6] = "l "; 결과값 :orem ipsum dolor sit amet 실패 코드 #include "libft.h" intfirst_word(char const *s1, char const *set) { inti; intj; j = 0; i = 0..
strjoin 이번에 포인터로 문제를 풀어보았음 이 함수에서는 s1문자열과 s2 문자열을 합해서 리턴을 해야함. malloc을 사용해 메모리 할당을 받은 공간에 문자를 합쳐서 리턴을 해주어야함. #include "libft.h" char*ft_strjoin(char const *s1, char const *s2) { intcount; char*temp; count = strlen(s1); count += strlen(s2); temp = (char *)malloc(sizeof(char) * count + 1); if (!temp) return (0); while (*s1) { *temp = *s1; s1++; temp++; } while (*s2) { *temp = *s2; s2++; temp++; } ..
strdup strdup는 스트링을 복제해서 할당된 메모리에 넣고 리턴을 해주는 친구임 malloc을 사용해야함. 함수 원형 char*ft_strdup(const char *string) 구현 #include "libft.h" char*ft_strdup(const char *string) { char*temp; inti; intcount; i = 0; count = strlen(string); temp = (char *)malloc(count * sizeof(char) + 1); while (string[i]) { temp[i] = string[i]; i++; } temp[i] = '\\0'; return (temp); } 참고 사이트 strdup() — 스트링 복제 strdup() — 스트링 복제 형식..