0

当我尝试使用参数运行程序时出现分段错误错误。现在我通过 GDB 运行它并找到有问题的行,它看起来像这样:

*dstip = (*optarg);

原型是:

char *dstip;

最后在这一行中调用它:

char *filter = ("ip dest host %s", dstip);

现在回头看它,我并不惊讶它看起来不起作用......坦率地说是错误的,并且通过完全删除这些行(并更改过滤器文本)来解决问题。但是,我需要输入的 IPv4 地址显示在将使用的错误消息过滤器中,并且对指针毫无用处并且来回尝试了不同的东西,我无法做到正确。也就是我只有getwarning initialization makes pointer from integer之类的……怎么办?

4

1 回答 1

5

该声明

*dstip = (*optarg);

未设置dstip为指向optarg. 相反,它将指向的第一个字符设置为与dstip指向的第一个字符相同的值optarg。即它与

dstip[0] = optarg[0];

dstip未初始化的指针一样,您更改了内存中的未分配区域,这将导致奇怪的事情发生。

还有,表达式

("ip dest host %s", dstip)

不会做你认为它做的事,至少如果你认为它会返回一个格式化的字符串。它真正做的是使用逗号运算符,它计算逗号两边的表达式,但只返回逗号右边表达式的结果。

于 2012-08-19T16:55:04.747 回答