用附加参数替换带有snprintf的sprintf

时间:2017-04-12 12:00:37

标签: linux shell unix

我正在编写一个shell脚本,用一个单独的.cc文件中的sizeof()替换snprintf中的一个附加参数来将所有sprintf替换为snprintf,

前 -

 sprintf(temp1, "msg%d", hostid); 
 sprintf(temp2, "msg%d", hostid);
 sprintf(temp3, "msg%d", hostid);

替换为

 snprintf(temp1, sizeof(temp1), "msg%d", hostid);
 snprintf(temp2, sizeof(temp2), "msg%d", hostid);
 snprintf(temp3, sizeof(temp3), "msg%d", hostid);

注意:本例中sprintf的第一个参数可能与sprintf不同,它不是常数。

1 个答案:

答案 0 :(得分:0)

我认为这个命令会起作用:

sed 's@sprintf(\([^,]*\),\([^,]*\),\([^,]*\));@snprintf(\1, sizeof(\1), \2, \3);@g' theCCfile.cc

也许我错了,但我认为sizeof参数必须与第一个sprintf参数no相同?如果没有,请按sizeof(\1)

重新sizeof(temp)

在此命令中,每个sprintf参数都将复制到新的snprintf行。如果您要替换sprintf行的第二个和/或第三个参数,请使用\2命令中的常量参数替换\3和/或sed,而不是复制。