가 변 장 구조 체

1703 단어 구조 체
소식 체 가 길 어 지 는 문 제 를 자주 만 나 작은 정 리 를 해 보 자.길 어 지 는 구조 체 의 핵심 사상 은 바로 구조 체 의 마지막 데이터 구 조 를 하나의 지침 으로 하 는 것 이다. 이 지침 은 이 구조 체 의 끝 데 이 터 를 가리 키 는데 약간 빙빙 돌려 서 아래 구조 체 를 볼 수 있다.
typedef struct stru_tcp_server_msg
{
    uint32_ msgLength;  //                 ,  msgLength     
    uint32_ returnCode; //  TcpServer   
    uint8_  zmqMsgBody[0];  //   
}TS_TCP_SERVER_MSG;

 
위의 zmqMsgBody [0] 의 정 의 를 보면 이상 하 게 보이 지만 사실은 그 역할 은 바로 이 구조 체 의 끝 을 가리 키 는 것 입 니 다. 그 는 어떻게 사용 합 니까?
typedef struct stru_zmq_server_msg
{
  uint32_ deviceId;
  uint32_ msgCode;
}TS_ZMQ_SERVER_MSG;

 int len = sizeof(TS_TCP_SERVER_MSG) + 
           sizeof(TS_ZMQ_SERVER_MSG);
    TS_TCP_SERVER_MSG* tdata = (TS_TCP_SERVER_MSG*)malloc(len);
    tdata->msgLength = len;
    tdata->returnCode = 0;
    TS_ZMQ_SERVER_MSG* data = (TS_ZMQ_SERVER_MSG*)tdata->zmqMsgBody;

    data->deviceId = 100;
    data->msgCode = TS_DEVICE_CONFIG_REQ_MSG;

그렇습니다. malloc 하나의 size of (TS TCP SERVER MSG) + sizeof (TS ZMQ SERVER MSG) 길이 의 데이터 블록 을 사용 하면 됩 니 다. 예 를 들 어 상기 코드 tdata - > zmqMsgBody 가 가리 키 는 것 은 TS 입 니 다.TCP_SERVER_MSG 구조 체 의 꼬리 위치, 즉 TSZMQ_SERVER_MSG 의 첫 번 째 위치.
또 하 나 는 zmqMsgBody [0] 라 는 정의 가 있 는 컴 파일 러 가 컴 파일 되 지 않 고 해결 방법 은 zmqMsgBody [1] 로 간단하게 바 꾸 면 된다 는 것 이다.그러나 sizeof 의 크기 가 zmqMsgBody [0] 를 바 꿀 때 이 항목 은 구조 체 길이 에 포함 되 지 않 지만 zmqMsgBody [1] 는 이 항목 의 길 이 를 구조 체 길이 에 추가 한 다음 에 바이트 보완 (1 바이트 정렬 시 보완 이 필요 없 음), 예 를 들 어 TSTCP_SERVER_MSG 구조 체
[0] 시: size of (TS TCP SERVER MSG) = 8
[1] 시: size of (TS TCP SERVER MSG) = 8 + 1 + 3 = 12   //3 바이트 보충

좋은 웹페이지 즐겨찾기