0

我使用pcdtojpeg解决方案将我的一些旧 .pcd 图像转换为 jpeg 。由于我有很多图片,我正在编写一个 C 程序来自动化该过程。我有适度的 C# 经验,但对 C 还是很陌生。

这是我目前使用的一些占位符幻数:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int i=0;

for (i=0; i<90; i++)
{

    if(i<10)
    {       
    system("sudo ./pcdtojpeg img000%d.pcd", i);
    }

    else
    {
    system("sudo ./pcdtojpeg img00%d.pcd", i);
    }
}

return 0;
}

编译器输出错误,定义了系统函数的参数过多,因为它可能不接受任何参数。

我在网上搜索了大量文档,例如cplusplus.com和 linux.die.net,但没有找到任何答案如何在 C 中正确地迭代 system() 函数。

我在跑步

海合会 4.8.0

Linux 3.9.2-1-ARCH #1 SMP PREEMPT x86_64 GNU/Linux

4

2 回答 2

4

您不想“在内部迭代system()”。您想要做的是迭代 system()以便您多次调用它。您的代码已经这样做了。缺少的部分是如何在每次调用中将命令格式化为不同的。

为此,您应该使用snprintf()

char buf[1024];

snprintf(buf, sizeof buf, "sudo ./pcdtojpeg img%03d.pcd", i);
system(buf);

使用%-codes 格式化字符串的过程并不像您的代码所期望的那样内置于 C 语言中。它只是由一组(库)函数实现的约定,例如printf()and snprintf()

格式化代码的%03d意思是“从 中插入一个十进制数int,并在左侧使用零填充,使宽度变为 3 位,总计”。因此,不需if要这样做。

于 2013-05-13T09:05:47.327 回答
4

在此处附议 Maxim Skurydin 的评论。

您的 C 代码是一个围绕 shell 调用的简单循环。

在这种情况下,C 是错误的技术。改用 shell 脚本,并丢失 ,sudo因为除了系统管理目的之外,您永远不必使用它:

for id in $(seq -f %04.f 0 89)
do
    ./pcdtojpeg img${id}.pcd
done

完成得更快,容易理解和必要时更新。

(ShinTakezou 确实击败了我,提供了一个更简单的解决方案,如果您想要触摸的文件可以通过模式匹配来收集ls。)

于 2013-05-13T09:23:13.610 回答