【发布时间】:2015-08-13 17:27:57
【问题描述】:
我正在尝试为我的程序添加一些支持,让我可以输入 /Input/Images/%03d.png /Output/Images/%03d.blah,但我不知道该怎么做?
我已经搜索了我能想到的格式字符串 printf 和 argv 的每种组合。
我希望能够将 %03d 之前的所有内容作为常量加载,并循环 %03d 以选择多个不同的输入文件,以便将它们读入。所以它将是 /Input/Images/000.png,然后是 @987654326 @一直到/Input/Images/999.png。
tl;dr 我想处理一系列文件,但我不知道该怎么做。
【问题讨论】:
-
听起来像是各种格式字符串攻击的完美秘诀。
-
您是在尝试对文件名/路径进行模式匹配,还是您知道要将什么值替换为
%03d? -
你试过什么?作为@EugeneSh。写道,这样做会受到攻击,因为
argv字符串必须作为第一个参数传递给printf或sprintf。最好将您的程序参数拆分为source和dest,这样您就可以构建完整的文件名而不必担心损坏。 -
请更具体一点,您的程序到底应该做什么?你写你想输入
/Input/Images/%03d.png /Output/Images/%03d.blah但是然后呢? -
这将是一串数字,我在想像 0 表示前导零,3、4、5,无论位数是多少,而 d 与其他程序一样表示十进制采用。我希望能够获取文件的路径,并遍历文件名的数字以选择一组文件。假设有十个文件都命名为 Frame_00x.png,我希望能够采用路径,并将文件名中 x 之前的所有内容作为常量,并循环 x 最多 10 次,所以我可以读取所有这些文件。
标签: c printf argv format-string