gpt4 book ai didi

c - 如何将 argv[] 值从 main 传递到外部函数

转载 作者:行者123 更新时间:2023-11-30 16:57:00 26 4
gpt4 key购买 nike

我正在开发一个 C 程序,它是 ls 命令的修改版本。我已经完成了程序的大部分内容,但我陷入了特定的部分。我试图将最后一个 argc 参数传递到 main 之外的函数中(更准确地说是在另一个文件中)。我尝试实现如下解决方案:

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

上面的代码在我的main.c中。然后我在另一个文件中执行此操作:

//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 这样的通配 rune 件模式。搜索目录和子目录,并返回结果(文件大小和文件名)以及我没有提到的其他内容。这是我陷入困境并阻碍我前进的部分。

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

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

最佳答案

这很难理解。

将所需的参数添加到函数中,并在调用时从 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() 应该执行的操作,但这就是将值从一个函数传递到另一个函数的方法。

关于c - 如何将 argv[] 值从 main 传递到外部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39697067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com