我想使用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;运算符很有用,因为我对这个运算符有点困惑。如何修改我的脚本以获得预期的结果?
答案 0 :(得分:2)
在*。
之前加一个空格Coccinelle使用*表示需要匹配,而不是转换。 *表示应在结果中突出显示的行。
答案 1 :(得分:0)
我认为cocinelle使用*
运算符进行模式匹配,x*
会匹配多次出现的x
。
我会尝试使用反斜杠*
来逃避\*
。
此外,我认为你的替换模式中缺少*
。