Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 이 문서는 C언어로 작성할 때 반드시 염두해둬야 할 것들을 명시한다.
- strncpy는 그렇게 좋은 API는 아니다. 그이유는?
- 인자값의 src, dst, size 이렇게 들어온다면 흔히 size를
- sizeof(src)의 크기로 하는데 이는 아주 안좋다. 왜냐하면
- src의 마지막이 \0로 터미네이팅 되지 않기 때문이다.
- 그래서 src가 만약 0으로 초기화 되지 않았다면, src의 값은
- 버퍼오버플로우가 생기거나, 올바르지 않은 문자열이 될 수 있다.
- 해결 방법은 src의 버퍼를 넣어도 sizeof(src) - 1 로 한다음에
- 마지막에는 꼭 \0를 넣어주는 것이 좋다.
- 또다른 해결책으로는 snprintf 이 있다. 이는 n만큼의 버퍼이상을
- 넣으면 짤려서 들어간다. 가장 안전하다. 이 API는 NULL을 보증.
- 이 strncpy를 쓰면 왜!? 쓰는지 내가 이거에 대해 완벽하고 누구에게
- 설명할 수 있을 정도로 명확한 이해를 바탕으로 쓰는건지 확인하자.
- man 페이지에서 확인할 수 있겠지?
- 코드를 작성할 때에는 한 줄 한 줄 명확한 이해를 해야만 한다. 또한,
- 나는 내가 쓰는 API를 잘 모른다라고 생각하면서 코드를 짜라.
- 함수를 구성할 때에는 어떻게 구성해야 할까?
- 크게 함수에는
- func
- {
- 선언부
- 초기화부, cleanup
- 인자 exception처리부
- 로직
- closing 부
- 리턴
- }
- 이런 식으로 구성이 된다. function 이 나중에 모듈로 되는 경우에도
- 마찬가지로 적용이 된다. 즉,
- 모듈 각 함수들.
- {
- 선언 function
- 초기화 function, cleanup function
- exception 처리 function.(에러 처리)
- 로직 function
- closing function
- }
- 이런 식으로 구성이 되어야 한다. 예를들면 url_parser_init,
- url_parser_cleanup 이렇게.
- 우리가 코드를 짜는건 항상 문제가 생길 수 있다. 너무 코드를 돌리는데
- 집중을 하지 말고, 무슨 로직인지 생각해보고 간결하게 짜보자.
- 늘 근거를 생각해야한다. 짤대에도 왜이렇게 짰느냐? RFC문서에 이렇게
- 되어있었습니다. 라고 생각을 하거나, 왜 decode를 이렇게 짰는가? 할 때에도
- encode가 이런방식으로 되었습니다. 라고 이야기 할수 있어야.
- 모르면 확실하게 물어보라.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement