【问题标题】:How can I pass a directory name as an argument and output a list of files in it?如何将目录名称作为参数传递并输出其中的文件列表?
【发布时间】:2022-01-22 21:25:23
【问题描述】:

这个程序应该得到一个目录名作为参数。我有一段工作代码可以打印目录中的文件名。但是我怎么能在这里传递目录名呢?

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

int main(int argc, char* argv[]) {
  DIR *d;
  struct dirent *dir;
  d = opendir(".");
  if (d) {
    while ((dir = readdir(d)) != NULL) {
      printf("%s\n", dir->d_name);
    }
    closedir(d);
  }
  return(0);
}

【问题讨论】:

  • if ((d = opendir(argv[1])) != NULL) { /* work with d */ closedir(d); } else { perror(argv[1]); exit(EXIT_FAILURE); }
  • 您可以在命令行中将参数传递给您的程序。所有参数都通过main 的参数提供给您的代码。了解argcargv 的含义。然后只需将你得到的名字传递给opendir

标签: c linux


【解决方案1】:

您应该从命令行获取full path 作为程序的参数。在代码的main 函数中,有两个参数:int argc & char* argv[]

int argc 表示您的程序在执行时收到的参数数量。程序的名称本身就是一个参数。

例如,在 ./a.out argument1 argument2 中,a.out 程序的 argc 将等于 3。

char* argv[] 是一个由char* 组成的数组,所有这些都指向一个参数。

在前面的示例中,argv[0] == 'a.out'argv[1] == 'argument1'argv[2] == 'argument2'

现在更改您的代码如下:

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

int main(int argc, char* argv[]) {
  DIR *d;
  struct dirent *dir;
  if(argc==2){
    char* path = argv[1];
    d = opendir(path);
    if (d) {
      while ((dir = readdir(d)) != NULL) {
        printf("%s\n", dir->d_name);
      }
      closedir(d);
    }
    return(0);
  }else{
      printf("Wrong number of arguments");
      return 1;
  }
  
}

那么你应该如下调用程序:

./name_of_the_program /path/to/the/dir

【讨论】:

  • 您应该添加强制检查是否有额外的参数可用。并且一些解释为什么使用索引1 可能也有助于OP。
  • 你说得对,我更新了代码
  • Wrong number of arguments 听起来像是一条错误消息。 fprintf(stderr, "...");
猜你喜欢
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 2018-07-06
  • 1970-01-01
相关资源
最近更新 更多