当我尝试用参数运行程序时,遇到了分段错误。现在我已经在GDB中运行了它,发现了有问题的行,它看起来像这样:
*dstip = (*optarg);
原型是:
char *dstip;
最后,它被称为
char *filter = ("ip dest host %s", dstip);
现在回过头来看,我并不惊讶它看起来不起作用。。。坦率地说,这是错误的,通过完全删除这些行(并更改过滤器文本)来解决问题。然而,我需要输入的IPv4地址显示在错误消息过滤器中,它将在中使用,由于对指针毫无用处,并且来回尝试了不同的事情,我无法正确处理。也就是说,我只得到warning initialization makes pointer from integer
之类的。。。该怎么办?
语句
*dstip = (*optarg);
不将CCD_ 2设置为指向CCD_。相反,它将dstip
指向的第一个字符设置为与optarg
指向的第一字符相同的值。即,它与相同
dstip[0] = optarg[0];
由于dstip
是一个未初始化的指针,因此更改内存中未分配的区域会导致奇怪的事情发生。
此外,表达
("ip dest host %s", dstip)
不会做你认为它会做的事情,至少如果你认为它将返回一个格式化的字符串。它真正的作用是使用逗号运算符,它计算逗号两侧的表达式,但只返回逗号右侧表达式的结果。