我在这一行中出现段错误:
if(memcmp(datap, 0x38 , 1) == 0)
这是来自 gdb 的跟踪,您可以在此处看到 datap:
Program received signal SIGSEGV, Segmentation fault.
0x00000000004010f1 in processMTMHeader (
datap=0x2aaaab0b001c "134666336653466.367034AAAA1.ETR36676434U3536616063346136626570346071:00:0036627061346071:00:0036646267346360606036656334633666633463366667346336706034633670613461606060367062346071:00:0036706334616060603Ea", h=0x7fffffffb960,
endmmsgp=0x2aaaab0b0090 "3Ea") at unzipper.c:91
91 if(memcmp(datap, 0x38 , 1) == 0)
您使用整数
值0x38
作为指针,这很可能不是一个好主意。
您可能应该拥有:
const uint8_t data[] = { 0x38 };
if(memcmp(datap, data, sizeof data) == 0)
或者,当然,因为它只是一个字节:
if(((uint8_t *) datap)[0] == 0x38)
更新 假设datap
被声明为unsigned char *datap
,我们可以放弃演员表并只做:
if(*datap == 0x38)