2013-05-30 38 views
1

我正在使用Mac OSX並在終端中使用bash。我在C編程,並且在for循環中使用system()時遇到問題。我意識到我正在嘗試做的事情可以用shell腳本完成,但我正在嘗試並行化該過程,而目前我只知道如何使用C中的openmp編程來完成此工作。更新for循環中的字符串,用於傳遞給系統

總體思路是調用一個可執行文件./program,該程序有三個輸入:一個整數,一個字符串和一個double。我想用各種輸入來調用程序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(字符串1,字符串2)。我受到啓發,在理解strcpy之前嘗試這個方法,通過模仿如何打印double,整數等。

這是否可以通過其他方式完成我想要做的事情?感謝您提供的任何幫助。

回答

1

看起來你正在尋找sprintf(3)

sprintf(path, "/home/folder%04d", spot); 
sprintf(command, "./program %d %s %lf", 50, path, X); 
+0

非常感謝你,這正是我需要的。我相信該程序正在運行,但是,我不認爲它正在並行運行,這是我需要考慮的其他事情......再次感謝您的幫助。 –