我正在开发一个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);
到目前为止,我可以在这里发布实际的作业和我的所有代码,但这会被视为作弊不会......所以我想避免这样做。
答案 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()
应该做的事情,但这是将函数值传递给另一个函数的方法。