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 使用 * 表示需要匹配,而不是转换。 * 表示应在结果中突出显示的行。
我想使用 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
。
我会尝试使用反斜杠 \*
来转义 *
。
此外,我认为您的替换模式中缺少 *
。
在 *.
前加一个 spaceCoccinelle 使用 * 表示需要匹配,而不是转换。 * 表示应在结果中突出显示的行。