Coccinelle中的指针问题

时间:2015-08-07 16:43:16

标签: c static-analysis coccinelle

我想使用Coccinelle脚本更改我的代码:

// Before modification

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    int *p;

    *p=i;

    return 0;
}

预期结果是:

// After modification

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    int *p;

    if (p!=NULL)
        *p=i;

    return 0;
}

我的Coccinelle脚本如下:

@rule1@
type T;
T* ptr;
expression E;
@@

-*ptr= E;
+ if (ptr!=NULL)
+ptr=E;

我的剧本错了,因为&#34;明星&#34;运算符由Coccinelle使用。任何人都可以帮助我知道&#34;明星&#34;运算符很有用,因为我对这个运算符有点困惑。如何修改我的脚本以获得预期的结果?

2 个答案:

答案 0 :(得分:2)

在*。

之前加一个空格

Coccinelle使用*表示需要匹配,而不是转换。 *表示应在结果中突出显示的行。

答案 1 :(得分:0)

我认为cocinelle使用*运算符进行模式匹配,x*会匹配多次出现的x

我会尝试使用反斜杠*来逃避\*

此外,我认为你的替换模式中缺少*