일부 exsiting 코드에서 찾았지만 문제가 생겼다. 코드가 제대로 작동하면 코드 조각에 이상한 점이 있으면이 코드를 사용하면 도움이 될 수 있습니까?포장 된 구조체 크기가 C입니까?
구조체의 크기를 계산할 때 2를 무시하는 이유는 무엇입니까? ?
tmsg_sz = sizeof(plfm_xml_header_t) + sizeof(oid_t) + sizeof(char*)
+ sizeof(unsigned) + sizeof(snmp_varbind_t)*5 ;
tmsg = (snmp_trap_t*) malloc(tmsg_sz);
if (!tmsg) {
PRINTF("malloc failed \n");
free(trap_msg);
return -1;
}
memset (tmsg, 0, tmsg_sz);
tmsg->hdr.type = PLFM_SNMPTRAP_MSG;
copy_oid_oidt(clog_msg_gen_notif_oid, OID_LENGTH(clog_msg_gen_notif_oid), &tmsg->oid);
tmsg->trap_type = SNMP_TRAP_ENTERPRISESPECIFIC;
tmsg->trap_specific = 1;
tmsg->trapmsg = strdup("Trap Message");
tmsg->numofvar = 5;
build_snmp_varbind(&(tmsg->vars[0]), facility, STR_DATA_TYPE, sizeof(facility)+1, clog_hist_facility_oid, 14);
build_snmp_varbind(&(tmsg->vars[1]), &sev, U32_DATA_TYPE, sizeof(sev),clog_hist_severity_oid, 14);
build_snmp_varbind(&(tmsg->vars[2]), name, STR_DATA_TYPE, sizeof(name)+1, clog_hist_msgname_oid, 14);
build_snmp_varbind(&(tmsg->vars[3]), trap_msg, STR_DATA_TYPE, strlen(trap_msg)+1,clog_hist_msgtext_oid, 14);
// get system uptime
long uptime = get_uptime();
build_snmp_varbind(&(tmsg->vars[4]), (long*)&uptime, TMR_DATA_TYPE, sizeof(uptime),clog_hist_timestamp_oid, 14);
typedef struct snmp_trap_s {
plfm_xml_header_t hdr;
oid_t oid; /* trap oid */
unsigned trap_type;
unsigned trap_specific;
char *trapmsg; /* text message for this trap */
unsigned numofvar;
snmp_varbind_t vars[0];
} __attribute__((__packed__)) snmp_trap_t;
"구조체의 크기를 계산할 때 두 개의 부호가 무시되는 이유는 무엇입니까?" 응? –
@Judeyou 이것은 데이터 구조를 묶는 한 가지 방법입니다. GCC와 같은 모양입니다. 다른 컴파일러는 예를 들어 #pragma pack (1)을 사용합니다. 여기에 뭐가 잘못됐다고 생각하니? –
이것은 이상하게 보입니다. 나는 그 크기가'sizeof (snmp_trap_s)'로 계산 될 것이라고 생각했을 것이다. – STLDeveloper