你可以这样做。该解决方案在字符串大小检查中留下了很多不足,但基础是这样的。
您输入的路径和文件号基地,并在要处理的批处理文件的数量。
#include <stdio.h>
int main (int argc, char *argv[])
{
unsigned basenum, numfiles, i;
char inname[1000], outname[1000];
if (argc < 5)
return 1;
sscanf(argv[3], "%u", &basenum);
sscanf(argv[4], "%u", &numfiles);
for (i=0; i<numfiles; i++) {
sprintf (inname, "%s/%03u.png", argv[1], basenum + i);
sprintf (outname, "%s/%03u.blah", argv[2], basenum + i);
//convertimg (inname, outname);
printf ("Processed %s to %s\n", inname, outname);
}
return 0;
}
程序输入
test aaa dest/bbbb 100 10
程序输出
Processed aaa/100.png to dest/bbbb/100.blah
Processed aaa/101.png to dest/bbbb/101.blah
Processed aaa/102.png to dest/bbbb/102.blah
Processed aaa/103.png to dest/bbbb/103.blah
Processed aaa/104.png to dest/bbbb/104.blah
Processed aaa/105.png to dest/bbbb/105.blah
Processed aaa/106.png to dest/bbbb/106.blah
Processed aaa/107.png to dest/bbbb/107.blah
Processed aaa/108.png to dest/bbbb/108.blah
Processed aaa/109.png to dest/bbbb/109.blah
听起来像一个完美的食谱各种格式字符串攻击。 –
您是否尝试对文件名/路径进行模式匹配,或者您是否知道要替换为“%03d”的值? –
你有什么尝试?作为@EugeneSh。写道,这样做会打开攻击,因为'argv'字符串必须作为第一个参数传递给'printf'或'sprintf'。最好将程序参数分成'source'和'dest',然后你可以建立完整的文件名而不用担心损坏。 –