'2012/05'에 해당되는 글 3건

회사에서 간단한 UDP 소켓 프로그래밍을 할 일이 생겼다. 입사 후 1년 8개월 정도 되었는데 기껏해야 데모를 위한 웹 페이지를 만드는 정도였다. 지난달에 안드로이드 앱이 필요해 인터넷을 뒤지며 오랜만에 Java에 손을 적셨고, 이번에 이 프로그램을 짜면서 VC++에 발을 담갔다. 그런데 몇 가지 아주 기초적인 실수로 시간을 허비해서 적어본다.

struct data {
	int a;
	int b;
};
struct data d;
char msg[32];	// buffer

//////////////////////////////////////////////////////
// ... (this part is omitted) ...
// receive data from the network to the msg variable
//////////////////////////////////////////////////////

strcpy(&d, message);

네트워크로 받은 값이 d에 제대로 복사되지 않는다.[각주:1] strcpy는 한 byte씩 복사하다가 값이 0이면 문자열의 끝이라고 생각하고 더는 값을 복사하지 않는다. 물론, strncpy를 해도 같다. 따라서 아래와 같이 memcpy를 이용해야 한다.

memcpy(&d, message, sizeof(d));

기초적인 내용인데 몇십 분을 헤맸다. 너무 오랜만에 C로 코딩해서 감이 없다.

다음은 샘플 소스에 있던 msg, strlen(msg) 부분을 보고 생각 없이 copy&paste를 해서 발생한 일이다.

send(sock, (char*)&d, strlen((char*)&d), 0);

위와 같이 하면 8bytes를 보내는 것이 아니라 d를 문자열로 봐서 8bytes 미만이 될 수도 있다. 내 경우엔 1byte가 됐다. 결국, 첫 번째 오류와 같다.

send(sock, (char*)&d, sizeof(d), 0);

이걸로 서버 프로그램이 잘못된 것이 아니냐며 관계자를 불렀다. '나는 프로그래머다'서 누가 말했듯, 자신에게 잘못이 없는지 생각하기보다 다른 사람이 잘못했을 것이라고 믿어버린 경우다. 나의 사소한 실수에 스스로 오그라들고 말았다.

프로그래밍도 감각을 잃으면 정말 사소한 곳에서 오류를 만들고 시간을 허비하게 된다. 틈틈이 프로그래밍을 게을리 말아야 겠다.

  1. 운이 좋아 d 내부의 a, b 값이 아주 크다면 제대로 값이 복사될 수도 있겠다. [본문으로]

'[아는게 힘이다] > [프로그래밍]' 카테고리의 다른 글

부분합(subsum) 문제 관련  (0) 2016.02.25
그래프 색칠하기  (0) 2016.02.15
[C] 몇 가지 코딩 실수  (2) 2012.05.14
[C++/ACM] 820 Internet Bandwidth  (0) 2010.05.16
[알고리즘] Interval Scheduling  (2) 2010.04.29

댓글을 달아 주세요

지난 4월 말에서 5월 초까지 일주일간 미국 마운틴 뷰 지역에 출장을 다녀왔다. 샌프란시스코 공항으로 네 번째 입국이라 아주 익숙한 광경이다. TV도 보고, 쇼핑도 하고 미국 생활을 조금 즐겨보고 싶었지만, 내내 서브웨이 샌드위치만 먹고, 회의장과 호텔만 오갔다. 업무 출장이 다 그렇지 뭐... ㅋㅋ

캘리포니아의 맑은 하늘과 슈퍼 셔틀캘리포니아의 맑은 하늘과 슈퍼 셔틀

샌프란시스코 공항만 네 번째샌프란시스코 공항만 네 번째

서브웨이 음식점 앞의 버스 환승장(transit center)서브웨이 음식점 앞의 버스 환승장(transit center)

이런 집에서 오손도손 사는 꿈?이런 집에서 오손도손 사는 꿈?

오솔길(Creek trail)로 매일 출퇴근오솔길(Creek trail)로 매일 출퇴근

회의 장소를 제공한 회사의 홍보(?)회의 장소를 제공한 회사의 홍보(?)

댓글을 달아 주세요

미국 마운틴 뷰 출장의 네 번째 밤이다.

다른 출장에 비해 잠을 꽤 많이 잔다. 시간이 남아서가 아니라 너무 피곤해서다. 회의장에서 호텔까지 도보로 20분 정도 걸리는데, 회의가 끝나면서 긴장이 풀려 돌아오는 내내 비몽사몽이다. 고속 주행하는 자전거가 많은 오솔길(creek trail)을 지나고, 신호등 없는 고속도로 진입로를 건너야 하는 다소 위험한 길이라 잘못하면 사고가 날 수 있겠다는 생각이 이따금 내 멍한 머리를 스치곤 한다.

저녁거리를 산 후 호텔로 돌아와 1시간 30분만 자고 일어나야지 하곤 7시쯤 잠들어 3~4시간 후에 겨우 깨어난다. 부랴부랴 일일 보고서를 작성하고, 또다시 밤 2~3시에 잠을 청한다. 아침 6~7시쯤 깨어나니 하루에 8~9시간을 자는데도 피곤함이 가시질 않는다.

매일 반복되는 샌드위치, 햄버거, 쿠키, 탄산음료, 커피, 과일(?)도 이젠 지겹다. 식당을 찾아 식사할 마음의 여유 따위는 없으니, 매일 가는 subway에서 고르는 메뉴를 변화시키는 정도밖에 할 수 있는 선택이 없다. 덕분에 미국에 있을 때도 부담스럽던 subway 메뉴 주문은 상당히 능숙해졌다. 점원이 이것저것 물어보기 전에 아예 한꺼번에 다 말하는 정도. 역시 반복 경험이 제일 좋은 훈련이다.

'[순보의 일기장]' 카테고리의 다른 글

[2012.06.08] 스포츠 & 운동  (0) 2012.06.08
[2012.06.07] 스터디  (6) 2012.06.08
[2012.05.03] 출장지에서...  (0) 2012.05.04
[2012.02.28] 요즘 근황  (0) 2012.02.29
[2012.01.05] 독서(공부)는 어떻게 해야하나요?  (0) 2012.01.05

댓글을 달아 주세요