1

我正在使用 Mac OSX 并在终端中使用 bash。我正在用 C 编程,在 for 循环中使用 system() 时遇到问题。我意识到我想要做的事情可以用一个 shell 脚本来完成,但我正在尝试并行化这个过程,目前我只知道如何使用 C 中的 openmp 编程来实现它。

总体思路是调用可执行文件 ./program,该程序具有三个输入:整数、字符串和双精度。我想用各种输入调用程序 100 次。目前,我对如何将字符串传递给由 for 循环更新的 system() 感到震惊。我应该注意,用于输入的 ("sub") 字符串也正在更新以从不同的文件夹(格式为:folder0000、folder0001 等)获取数据!

我的尝试是这样的:

#include <stdio.h>
#include <string.h>

int main(){

    int spot;
    double X;
    char command[50];

    #pragma omp parallel for private(command, path)
    for(X=0, spot=0; spot<100; X+=0.005, spot++){ 
        char path[50];
        strcpy(path, "/home/folder%04d", spot);
        strcpy(command, "./program %d %s %lf", 50, path, X);
        system(command);
    }

    return 0;
}

如果您知道 strcpy 是如何工作的(我不是真的),那么我得到的一个错误是显而易见的,那就是我传递了太多参数。它只喜欢取 2:strcpy(string 1, string 2)。在理解 strcpy 之前,我受到启发,通过模仿如何 printf double、整数等来尝试这个。

这是我可以完成我想做的事情的其他方式吗?感谢你们提供的任何帮助。

4

1 回答 1

1

看起来您正在寻找sprintf(3)

sprintf(path, "/home/folder%04d", spot);
sprintf(command, "./program %d %s %lf", 50, path, X);
于 2013-05-30T20:31:09.983 回答