Coccinelle 中的指针问题

Pointer issues in 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;
}

我的七星脚本如下:

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

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

我的脚本是错误的,因为 Coccinelle 使用了 "star" 运算符。任何人都可以帮助我了解 "star" 运算符的用途,因为我对这个运算符有点困惑。如何修改我的脚本以获得预期的结果?

我假设 * 运算符被 cocinelle 用于模式匹配,x* 将匹配连续出现的几次 x

我会尝试使用反斜杠 \* 来转义 *

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

在 *.

前加一个 space

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