임백준씨는 뉴욕의 프로그래머, 누워서 읽는 알고리즘, 누워서 읽는 퍼즐북 등을 집필 하셨으며

해커와 화가 등 외국 IT 도서 들의 번역도 여러번 한 적 있는 작가다.

개발자지만 그림도 그리며(소질은 모르겠지만 ^^) 쉽고 흥미롭게 읽히는 필력을 가진 분이다.

처음 뉴욕의 프로그래머라는 책을 통해 접한 이후 이분의 책은 모두 사서 일고 있다.

이번에 쓰게되는 '행복한 프로그래밍'이라는 책 역시 임백준 씨의 저서이다.


 컴퓨터 전문가 뿐 아니라 비관련자 들도 쉽게 읽고 생각 해 볼 수 있는 책! 이라는 목표? 로 만들어진

책인 것 같다. 그에 따라 내용도 어렵지 않고 전반적인 컴퓨터 상식(알고리즘 을 포함하여 컴퓨터 관련 역사적인

사건과 배경등)등 을 재미있는 이야기 보따리로 풀어 놓은 책이다. 그렇기에 컴퓨터 전공자들이 어떠한 지식과

학문을 위해 책을 읽는다면 그다지 큰 도움은 되지 않을 수 도 있지만 가벼운 마음으로 접한다면 쉽게 읽고 덮을

수 있는, 개발에 관심 있는 사람이라면 흥미를 갖고 요기거리로 볼 수 있는 책이라고 말하고 싶다.


(이후 자세한 내용은 계속 업데이트)

Posted by Yann'
,



필기 1급 - 실기 1급까지 한번에 합격 하였다.

내게 많은 의미가 있는 자격증인데

우선. 지금 리눅스를 사용하는 회사 업무에 도움이 되었다

두번째로는. 이거라도 안땃으면 올해에 한게 없을 지경이다.

마지막으로는. 노력을 통한 성취의 기쁨, 그리고 공부를 통해 얻는 좋은 효과들(자기 만족) 등을 깨달은 것.


시험 공부 요령으로

필기) 준비 기간 1주일

공식 교재인 리눅스 마스터 1급 교재를 사용 하였고. 기출문제 10회분을 풀어보면서

모든 문제를 교재를 통해 내용을 확인하며 이해, 암기 하였다.

양이 많을 것 같지만 막상 겹치는 내용이 많기 때문에 일일히 교재로 확인하며 공부해도 벅찬 양이 아니고

되새기기에 좋았다.


실기) 준비 기간 2주일

역시 공식 교재로 공부 하였고. 기출문제 10회분 정도를 풀어 보았다. 몇몇 파트는 회사 업무중 실습 해봤지만

거의 대부분 실습 없이 책과 기출문제로만 공부 하였다. 실기와 같이 모든 문제를 책을 통해 확인 정리 하였고

시험 일주일 전에는 중요한 내용, 취약한 부분을 A4로 정리하여(10장분량) 출퇴근 시에 공부 하였다.


그럼 리눅스 마스터를 공부하는 모든 분들에게 좋은 결과가 있기를.

Posted by Yann'
,

strcpy_s 함수 사용으로 인해 발생한 버그를 잡느라 몇시간을 소비했다.

그 이유를 알아 보자.

우선 문제 발생한 코드를 간략하게 구현해 본다.


a[100] = "test1";

b[100] = "";

c[100] = "test2";

위처럼 선언을 하면

아래와 같이 메모리가 할당된다

a메모리 : 't', 'e', 's', 't', '1', '\0', '\0', '\0', , , , , , , , 

b메모리 : '\0', '\0', '\0', ,,,,,,,,

c메모리 :  't', 'e', 's', 't', '2', '\0', '\0', '\0', , , , , , , , 

이때 

strcpy_s ( b, 200, "test3" ); 

함수를 선언하면

어처구니 없게도 a메모리 공간에 있던(꼭 배열 a가 아닐수도 있다.) test1이라는 문자열은 사라지고 이상한(?) 

값들이 채워져 버린다.

(회사에서 vs2008, .c 로 코딩시 런타임 에러가 없었는데 집에서 vs2012, c++ 로 코딩시 런타임 에러가 뜬다.)

이유를 알아보자.


strcpy(char *dest, char *src);

이 함수는 dest 포인터가 가리키는 메모리 공간에 src 포인터가 가리키는 문자열을 복사한다.

문자열 복사후 남은 공간은 모두 '\0'(0, 널값) 으로 채운다.


strcpy_s(char *dest, size_t length, char *src);

이 함수는 dest 포인터 위치에 src 문자열을 length만큼 복사한다.  - 문제1

문자열 복사후 남은 공간은 모두 이상한(?) 값으로 채운다.  - 문제2

(msdn 페이지에서 strcpy_s함수 설명을 보면, 디버깅모드에서는 남은 공간을 0xfd값으로 채운다고 하나

내가 확인했을때는 -2라는 값이 들어가 있었다.)


이 버그는 문제1, 문제2의 특성때문에 일어난다.

 strcpy_s 함수는 문자열을 length만큼 복사하며(dest 메모리 공간보다 클지라도 복사해 버린다.) - 문제1

src문자열 복사 이후에는 모두 0xfd 문자로 채워 버린다. - 문제2


그렇기 때문에 a배열까지 침범하여 문자열 복사를 진행하였고 이때 a배열에는 '\0'값이 아닌 0xfd값이

채워지므로 a배열을 사용할때에는 이유도 모르게 값이 바뀌어 있는 것이다.



* 집에서 vs2012, cpp로 테스트 한 결과 런타임 에러를 즉각즉가 출력해줬음.

* 회사에서 재 확인




Posted by Yann'
,