我正在编写一个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不同,它不是常数。
答案 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
,而不是复制。