如何将命令行参数传递给C函数

时间:2013-12-06 01:29:52

标签: c arrays command-line

我正在努力通过添加功能来清理我的代码,而且我遇到了一些我似乎无法弄清楚的东西。我有,我认为,大多数是正确的代码,它运行时没有我试图实现的功能。

无论如何,我的main方法需要4个参数,命令本身,两个输入和一个输出。

       int main (int numFiles, char *filenames[]){

我有两个功能和两个结构

    int compareNames(struct Strings,struct Files);
    int fileAssignment(int numFiles, char arraypointer[], struct Files);

    struct Files Data;
    struct Strings inputData;

我在将char * filenames []传递给我的函数

时遇到问题
    fileAssignment(numFiles, *filenames, Data);    // *filenames is the problem

函数看起来像这样。

    int fileAssignment(int arguments, char array[],struct Files Data)  // 2ed argument
    {

if ( arguments !=4 ){
printf(" Need two input files and one output file.");
return 4;
}

if ( (Data.input_file1 = fopen (array[1], "r")) == NULL ) {
printf("Can't open file 1 for reading, it either doesn't exist, or 
    was typed incorrectly.");
return 1;

代码不会编译此块。数组[i]是一个转换为int的指针。如果有人想修补它,我会很乐意发布所有代码。我在想我的问题是正确传递数组然后正确调用它。不确定,有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您的fileAssignment可以这样实现:

int fileAssignment(int numFiles, char *files[],struct Files Data)  // 2ed argument
{
    for(int i=1;i<numFiles;i++)//the files[0] is the name of the command
    {
       const char *cur_file = files[i];
       ...
    }  

}

答案 1 :(得分:0)

您正在将单个文件传递给该函数,然后将单个字符传递给fopen,传递所有文件然后访问每个文件

int fileAssignment(int numFiles, char *array[], struct Files);

...

fileAssignment(numFiles, filenames, Data);