(char *)&buf1 이 의미하는 것은?

글쓴이: 익명 사용자 / 작성시간: 목, 2001/12/06 - 2:44오전
안녕하세요. c초보 입니다.
send(sockClient, (char *)&buf2, sizeof(buf2), 0)
간단한 소켓 프로그래밍을 하고 있는데 함수에 넘겨주는 인자가 위와 같습니
다. (절대 send 함수 사용법을 물어보는 게 아니에요)
(char *)&buf1 <- 이 부분이 이해가 안갑니다. buf1의 주소를 문자형 포인터
로 캐스팅 하는건가요? 즉, send 함수는 전송할 값의 어드레스를 문자열로 받
나요? -_-?
여기서 buf1은 아래와 같은 구조체 입니다.
struct stcBuf2{
short shSize;
char temp[31];
short shRecv;
};
고수님 보시기에 허탈한 질문일 수도 있겠지만 잘 좀 부탁 드릴께요.
멍청해서 죄송합니다. ㅠ.ㅠ
Forums:
Re: (char *)&buf1 이 의미하는 것은?
답변을 이미 알고 계신 것 같네요.
형변환(보통 캐스팅이라고 하죠.)하는 것이 맞습니다.
즉, send의 함수형태(다른 함수들도 마찬가지 이지만)에서 두번째 인자는
char *로 지정이 되어있죠. 어떠한 데이터이든지 char *로 보내야만 합니다.
심지어 그것이 숫자형일때도...
보기에서는 구조체를 char*로 형변환을 시켰는데 send라는 함수는 이것이
구조체인지 문자형인지를 구분하지 못합니다. 즉, 그렇게 정해주는건 프로그래
머가
해주어야 하는거죠. 그러면 컴파일러에서 실행파일을 만들때 형변환을 시켜주
어
원하는 형태로 보내주는 겁니다.
음... 그런데 제가 보통 사용하는 방법은
typedef struct ABC {
int a;
char b [2];
int c;
} abc;
이렇게 형이 정의 되어있을 때
abc a;
...
send (sock, (abc *)&a, sizeof (abc), 0);
...
이렇게 char *로 캐스팅을 하지 않고 구조체 자체로 캐스팅을 합니다.
물론 받는 쪽도 똑같은 형태의 구조체를 받게하죠.
저도 자세하게 알고 사용하는 것이 아니지만 구조체형태로 보내고 받는게
프로그램을 직관적으로 작성할 수 있고 에러의 소지도 줄일 수 있다고
봅니다.
댓글 달기