libft 의문점

Worldi·2021년 11월 26일
0

42seoul

목록 보기
5/15
  1. memcmp 테스터기에서 unsigned 붙여줘야지 돌아가는 이유가 무엇일깡... \0 하고 \2 차이인거같은딩...
    https://stackoverflow.com/questions/40662819/difference-between-2-vs-2
    non printable 한 숫자.!?
    strncmp 에서도 그르넹...

memcmp

The memcmp() function shall compare the first n bytes (each interpreted as unsigned char) of the object pointed to by s1 to the first n bytes of the object pointed to by s2.

The sign of a non-zero return value shall be determined by the sign of the difference between the values of the first pair of bytes (both interpreted as type unsigned char) that differ in the objects being compared.

http://manpages.org/memcmp

strncmp

The strncmp() function shall compare not more than n bytes (bytes that follow a null byte are not compared) from the array pointed to by s1 to the array pointed to by s2.

The sign of a non-zero return value is determined by the sign of the difference between the values of the first pair of bytes (both interpreted as type unsigned char) that differ in the strings being compared.
http://manpages.org/strncmp

  1. strchr

strchr

The terminating null byte is considered to be part of the string.
이게 중요!
맨마지막 temp 스트링이 끝났을 때에도 이걸 고려해주는 것이 중요!

그리고 찾는 문자 c 에 대해서 char 자료형이 아닌 이유는 c언어의 하위 버전의 호환성 때문이라는 것도 있고,overflow 및 underflow 를 고려하기 위해서..

  1. strlcat

strlcat

는 가르침이 필요하다..

memset

https://dojang.io/mod/forum/discuss.php?d=1459
unsigned char 포인터를 쓰는 이유, (char ) 를 쓰지 않고,,,
주소값 연산을 할 때에는 부호가 없이 판단하는 것이 관례. 일반적으로는 unsigned 가 부호 없, signed 가 부호가 있다고 판단하지만, c언어 표준에서는 이러한 기준이 정해져 있지 않음.

memmove

memcpy 와 달리 overlap된 경우를 고려한다. 따라서, dest< src 인 경우에는 앞에서 부터 아닌 경우에는 뒤에서 부터 복사를 해주어야 함. 처음에 임시 버퍼를 이용해 malloc 을 설정하였지만 ,42 seoul 에서는 불가능... ㅋㅋ

calloc

//if (count == 0 || size == 0)
오히려 이거 지워 주니까 맞네..?

strnstr

https://kirkim.github.io/c/2021/02/11/strstr_strnstr.html
strnstr 원함수에서도 nee자리에 NULL이 들어오면 seg fault가 뜨게 되어있습니다. 제가 판단하기로는 저는 문제가 됐던게 hay가 NULL이고 nee에 "123" 이런식으로 들어올 경우에 원 strnstr는 seg fault가 아닌 NULL을 반환해 줘야 하는데 저는 seg fault가 일어 났던게 문제 였던것 같습니다. 정리하자면 hay가 NULL일때 nee의 길이가 0일때는 NULL, nee의 길이가 0이 아닐때는 seg fault가 일어나야 한다.

memchr

http://manpages.org/memchr
int c 를 unsigned char 로 인식함.
또한 unsigned char * 포인터로 형변환 시켜주어야 함.
https://stackoverflow.com/questions/15798661/why-does-the-function-memchr-use-int-for-the-argument-of-char-type
memchr구현하면서, char단위로 검색하는 함수가 매개변수를 왜 int로 받을까 한참을 고민했는데, 검색해보니 오래전에 만든 함수라 그렇다는 이야기가 있네요! 혹시나 저와 같은 고민을 하는 사람이 있다면 참고해보세용

strtrim

에서 끝이 1보다 같거나커야함! 그래야지 abort 안남.
왜냐면 str[end-1] 이런식으로 참조하기 때문.

strchr

함수의 모든 인자는 man page 를 참고하기!!!

profile
https://worldi.tistory.com/ 로 블로그 이전합니다.

0개의 댓글