如何将argv []值从main函数传递给外部函数

时间:2016-09-26 07:33:31

标签: c scope global-variables command-line-arguments main

我正在开发一个C程序,它是ls命令的修改版本。我已经完成了很多程序,但我被困在一个特定的部分。我试图将最后一个argc参数传递给main之外的函数(在另一个文件中更精确)。我尝试实施以下解决方案:

char ** filePattern;
filePattern = argv; 
int * numArguments;
numArguments = &argc;

以上代码在我的主要内容中。然后我在另一个文件中执行此操作:

//This Function is Passed to ftw by main.
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <ftw.h>
int listFunc (const char *name, const struct stat *status, int type)
{    
    //importing the argv and argc from main using pointers


     //if the call to stat failed, then just return
     if (type == FTW_NS)
     {        
        return 0;
     }  

     //Otherwise, if filename matches the filedescriptor entered by user,
     //return found files, their size and filename (with directory)  
     if(type == FTW_F)
     {          
        if(fnmatch(filePattern[numArguments - 1], name,0 )==0)
        {    
             printf("%ld\t%s\n", status->st_size, name);
        } 
     }
     else
     {
        if(fnmatch(filePattern[numArguments - 1], name,0 )==0)
        { 
            printf("%ld\t%s*\n", status->st_size, name);
        }
     } 

 return 0;
} 

这个任务的要点是获得像* foo.c这样的通配符文件模式。搜索目录和子目录,并返回结果(文件大小和文件名)以及我未提及的其他内容。这是我坚持的部分,并阻碍我前进。

函数listFunc通过main中的以下函数调用:ftw(".", listFunc, 1);

到目前为止,我可以在这里发布实际的作业和我的所有代码,但这会被视为作弊不会......所以我想避免这样做。

1 个答案:

答案 0 :(得分:0)

这很难理解。

将所需的参数添加到函数中,并在调用时从main()传递它。不要使用全局变量!

像这样:

int listFunc (const char *pattern, const char *name, const struct stat *status, int type)
{
  ...
}

然后在main()

listFunc(argv[argc - 1], rest of parameters ...);

它是argc - 1,因为argv与所有C数组一样,基于0。

我不确定我是否遵循了listFunc()应该做的事情,但这是将函数值传递给另一个函数的方法。