
정신없이 코딩을 하다가 어느순간 정신을 차려보니 헤더파일 목록 상태가 말이 아니다. 정리를 하려고 하는 순간 문득 헤더파일을 정리할 때도 순서가 있는지 궁금했다. A.h, B.h A.h와 B.h 라는 헤더파일이 있다. A.h에서는 B.h 내에 선언되어 있는 함수를 사용한다. 그런데 소스파일 안에서 B.h를 A.h 보다 먼저 포함하고 컴파일 해보자. 컴파일도 잘 되고 실행도 잘 된다! 그런데 여기서 순서를 바꿔 A.h 다음에 B.h를 포함 해보자. 컴파일하면 컴파일 에러가 발생한다. B.h가 먼저 있을때는 소스파일 내에서 A.h 내용 앞에 B.h 내용이 있기 때문에 컴파일 할 때 문제가 없다. 하지만 반대의 경우 A.h의 앞에는 필요한 B.h의 내용이 없어서 컴파일 에러가 발생한다. 헤더 파일 포함(#in..

목차 i - 소개 1 - listen socket 1.1 - 소켓이란? 1.2 - LISTEN 상태 1.3 - LISTEN 상태로 설정하는 방법 2 - listen socket 설정하기 2.1 - socket() 2.2 - bind() 2.3 - listen() o - 마무리 i - 소개 서버가 클라이언트로 부터 오는 요청을 받아 처리하기 위해서는 먼저 client socket을 생성할 수 있도록 서버의 listen socket을 설정해야 한다. socket을 LISTEN 상태로 만들어서 client로 부터 오는 요청을 받을 수 있도록하는 방법을 알아보자. 1 - listen socket 1.1 - 소켓이란? 서버와 클라이언트가 서로 접속하고 통신을 하기 위해서 소켓(socket)을 이용한다. 소켓은 네..
[개요] strjoin 함수란? strjoin 함수 구현 코드 strjoin 함수 구현 설명 strjoin은 문자열 2개를 이어붙일때 사용하기 위한 함수다. 1. strjoin 함수란? char *strjoin(char const *s1, char const *s2); strjoin 함수는 문자열 2개를 이어붙어 동적할당 공간에 저장한다. return값은 이어붙여진 문자열 주소를 반환한다. 인자로 들어온 문자열 중에 하나라도 주소가 NULL이라면 return 값으로 NULL을 반환한다.(NULL Guard) 동적할당 실패시에도 NULL을 반환한다. 2. strjoin 함수 구현 코드 char*strjoin(char const *s1, char const *s2) { char*joined; inti; in..
[개요] strdup 함수란? strdup 함수 구현 코드 strdup 구현 설명 strdup함수는 동적할당 된 메모리 공간에 문자열을 복사할 때 사용된다. 직접 구현해서 내부 원리를 알아보자. strdup 함수란? #include char *strdup(const char *s1) strdup 함수는 문자열 s1을 복사하기 위해서 충분한 메모리를 할당한다. s1 문자열을 동적할당 메모리에 복사한 후에 메모리 주소(pointer)를 반환한다. 이후에 이 메모리 주소는 free 함수를 통해 동적할당 해제되어야 한다. 만약 할당할 메모리 공간이 충분하지 않다면(동적할당 실패 시), NULL 값이 반환되고 errno에 ENOMEN이 세팅된다. strdup 함수 구현 코드 char*mgo_strdup(const..
42cursus에 있는 grahics programming과 events programming 과제들을 하기위해서는 miniLibX(이하 mlx)라는 Library의 사용이 적극 권장된다. 잘 사용해서 grahics, events programming을 하기 위해 mlx가 무엇인지 알아보도록 하자. 1. mlx는 무엇일까? MiniLibX - Simple X-Window Interface Library for students mlx는 X-Window에 대한 지식 없이도 쉽게 그래픽 소프트웨어을 만들 수 있도록 제작되었다. 간단한 창 생성, 그리기 도구, 이미지 및 기본적인 이벤트 관리 기능을 제공한다. X-Window란 네트워크 기반 그래픽 시스템이다. X-Window에는 X-Server와 X-Clien..
#include "libft.h" char*ft_strnstr(const char *haystack, const char *needle, size_t len) { size_tneedle_len; if (!(needle_len = ft_strlen(needle))) return ((char *)haystack); while ((len - needle_len + 1) && (*haystack)) { if (*haystack == *needle) if (!(ft_memcmp(haystack, needle, needle_len))) return ((char *)haystack); haystack++; len--; } return (NULL); } 에서 NO CRASH(no segfault)가 되기 때문에 수정이..
memcpy, memmove에서 NULL Guard memmove함수가 인자로 받는 NULL값에 대해서 이렇게 작동한다. dst와 src 모두 NULL일 경우에 NULL 을 리턴하지만, dst와 src 둘 중 하나가 NULL인 경우 segfault 를 일으킴. If I remember the libc memmove segfault if dst is NULL, or if src is NULL, but doesn’t segfault if both are NULL. src == 0 || dst == 0 인 경우에 segfault를 일으키지 않고, src == 0 && dst == 0 인 경우만 NULL 값을 리턴 src == 0, dst ≠ 0 이면 ptr == 0에 접근해서 dst에 옮기라는 것(segfau..