当* customer_num为NULL时,以下宏会导致段错误。
#define SAVE(a,b,c) if(a){stchar(a,b,c);}
在宏中有一种方法可以检查是否已定义,如果没有,则只使用NULL。 如果我只使用NULL,宏就可以工作,如下所示。
SAVE(NULL,buf,16);
1)save_cust(NULL);
2)save_cust(char **customer_number,..etc);
3)SAVE(*customer_number,buf,16); //causes seg fault since it *customer_number is undefined
答案 0 :(得分:0)
鉴于此宏
#define SAVE(a,b,c) if(a){stchar(a,b,c);}
以及以下调用
SAVE(*customer_number,buf,16);
预处理器的输出是
if (*customer_number){stchar(*customer_number,buf,16);}
结果是你没有检查customer_number
是否为NULL,而是检查*customer_number
是否为NULL。当customer_number
为NULL时,检查*customer_number
会导致seg_fault。
问题的一个解决方案是将宏定义为
#define SAVE(a,b,c) if(a){stchar(*a,b,c);}
然后调用宏
SAVE(customer_number,buf,16);
经过进一步审核,我认为您正在寻找的宏是
#define SAVE(a,b,c) if(a && *a){stchar(*a,b,c);}
如果customer_number
实际上是指向指针的指针,则需要首先验证customer_number
不是NULL,然后验证*customer_number
不是NULL。