gpt4 book ai didi

c - 如何修改C程序将其变成函数

转载 作者:行者123 更新时间:2023-11-30 17:48:28 25 4
gpt4 key购买 nike

我正在尝试获取给定的程序并将其转换为函数(以便我可以修改它以进行递归调用)。最初的任务是目录遍历(深度优先)。这只是为了帮助我开始。

原程序:

#include <dirent.h>
#include <errno.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
struct dirent *direntp;
DIR *dirp;

if (argc != 2) {
fprintf(stderr, "Usage: %s directory_name\n", argv[0]);
return 1;
}

if ((dirp = opendir(argv[1])) == NULL) {
perror ("Failed to open directory");
return 1;
}

while ((direntp = readdir(dirp)) != NULL)
printf("%s\n", direntp->d_name);

while ((closedir(dirp) == -1) && (errno == EINTR)) ;

return 0;
}

这个程序运行得很好。但是当我把它变成一个函数时,我收到了一个错误。我相信这与通过

char *argv[]

这是我到目前为止尝试制作的代码,main.c:

#include <dirent.h>
#include <errno.h>
#include <stdio.h>

int shownames(char *argv[]);

int main(int argc, char *argv[]) {
struct dirent *direntp;
DIR *dirp;

if (argc !=2) {
fprintf(stderr, "Usage: %s directory_name\n", argv[0]);
return 1;
}

shownames(*argv[]);

return 0;
}

和shownames.c:

#include <dirent.h>
#include <errno.h>
#include <stdio.h>

int shownames(char *argv[]) {
struct dirent *direntp;
DIR *dirp;

if ((dirp = opendir(argv[1])) == NULL) {
perror ("Failed to open directory");
return 1;
}

while ((direntp = readdir (dirp)) != NULL)
printf("%s\n", direntp->d_name);

while ((closedir(dirp) == -1) && (errno == EINTR)) ;

return 0;
}

我知道这可能是一个相当简单的错误,我只是似乎无法弄清楚我做错了什么。任何帮助将不胜感激。谢谢!

最佳答案

您遇到编译器错误吗?因为正如 mbratch 所说, shownames(*argv[]); 不是有效的语法;具体来说,空方括号 [] 用于声明长度未知的数组,而不是用于使用该数组。尝试一下:

shownames(argv);

此外,您忽略了 shownames 的返回值。你可能想以以下内容结尾:

return shownames( argv );

关于c - 如何修改C程序将其变成函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18563727/

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