Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.42 KB | None | 0 0
  1. 이 문서는 C언어로 작성할 때 반드시 염두해둬야 할 것들을 명시한다.
  2.  
  3.  
  4. strncpy는 그렇게 좋은 API는 아니다. 그이유는?
  5. 인자값의 src, dst, size 이렇게 들어온다면 흔히 size를
  6. sizeof(src)의 크기로 하는데 이는 아주 안좋다. 왜냐하면
  7. src의 마지막이 \0로 터미네이팅 되지 않기 때문이다.
  8. 그래서 src가 만약 0으로 초기화 되지 않았다면, src의 값은
  9. 버퍼오버플로우가 생기거나, 올바르지 않은 문자열이 될 수 있다.
  10.  
  11. 해결 방법은 src의 버퍼를 넣어도 sizeof(src) - 1 로 한다음에
  12. 마지막에는 꼭 \0를 넣어주는 것이 좋다.
  13.  
  14. 또다른 해결책으로는 snprintf 이 있다. 이는 n만큼의 버퍼이상을
  15. 넣으면 짤려서 들어간다. 가장 안전하다. 이 API는 NULL을 보증.
  16.  
  17. 이 strncpy를 쓰면 왜!? 쓰는지 내가 이거에 대해 완벽하고 누구에게
  18. 설명할 수 있을 정도로 명확한 이해를 바탕으로 쓰는건지 확인하자.
  19. man 페이지에서 확인할 수 있겠지?
  20.  
  21. 코드를 작성할 때에는 한 줄 한 줄 명확한 이해를 해야만 한다. 또한,
  22. 나는 내가 쓰는 API를 잘 모른다라고 생각하면서 코드를 짜라.
  23.  
  24. 함수를 구성할 때에는 어떻게 구성해야 할까?
  25. 크게 함수에는
  26.  
  27. func
  28. {
  29. 선언부
  30. 초기화부, cleanup
  31. 인자 exception처리부
  32.  
  33. 로직
  34.  
  35. closing 부
  36. 리턴
  37. }
  38.  
  39. 이런 식으로 구성이 된다. function 이 나중에 모듈로 되는 경우에도
  40. 마찬가지로 적용이 된다. 즉,
  41.  
  42. 모듈 각 함수들.
  43. {
  44. 선언 function
  45. 초기화 function, cleanup function
  46. exception 처리 function.(에러 처리)
  47. 로직 function
  48. closing function
  49. }
  50.  
  51. 이런 식으로 구성이 되어야 한다. 예를들면 url_parser_init,
  52. url_parser_cleanup 이렇게.
  53.  
  54. 우리가 코드를 짜는건 항상 문제가 생길 수 있다. 너무 코드를 돌리는데
  55. 집중을 하지 말고, 무슨 로직인지 생각해보고 간결하게 짜보자.
  56.  
  57. 늘 근거를 생각해야한다. 짤대에도 왜이렇게 짰느냐? RFC문서에 이렇게
  58. 되어있었습니다. 라고 생각을 하거나, 왜 decode를 이렇게 짰는가? 할 때에도
  59. encode가 이런방식으로 되었습니다. 라고 이야기 할수 있어야.
  60.  
  61.  
  62. 모르면 확실하게 물어보라.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement