C语言 使用 memcmp() 时的 Segfault



我在这一行中出现段错误:

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)

相关内容

  • 没有找到相关文章

最新更新