Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取目录中的所有文件名而不获取"&引用;及"&引用;在C中_C_Linux - Fatal编程技术网

如何获取目录中的所有文件名而不获取"&引用;及"&引用;在C中

如何获取目录中的所有文件名而不获取"&引用;及"&引用;在C中,c,linux,C,Linux,我正在使用Linux系统 DIR *dir; struct dirent *ent; while ((ent = readdir (dir)) != NULL) { printf ("%s\n", ent->d_name); } 我得到了“,”,“和一些文件名。 我怎样才能摆脱“和”。“? 我需要这些文件名以便进一步处理。 什么类型的ent->d_name??它是字符串还是字符?使用strcmp while ((ent = readdir (d

我正在使用Linux系统

 DIR *dir;
  struct dirent *ent;
  while ((ent = readdir (dir)) != NULL) {           
    printf ("%s\n", ent->d_name);
  }
我得到了
”,“
和一些文件名。 我怎样才能摆脱
”。“
? 我需要这些文件名以便进一步处理。
什么类型的
ent->d_name
??它是字符串还是字符?

使用strcmp

while ((ent = readdir (dir)) != NULL) {  
if (strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0)         
    //printf ("%s\n", ent->d_name);
  }

使用strcmp

while ((ent = readdir (dir)) != NULL) {  
if (strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0)         
    //printf ("%s\n", ent->d_name);
  }

阅读readdir的手册页,获取以下信息:

struct dirent {
               ino_t          d_ino;       /* inode number */
               off_t          d_off;       /* offset to the next dirent */
               unsigned short d_reclen;    /* length of this record */
               unsigned char  d_type;      /* type of file; not supported
                                              by all file system types */
               char           d_name[256]; /* filename */
           };
所以
ent->d_name
是一个字符数组。当然,你可以把它当作字符串

要摆脱
”。“

更新


生成的
ent
包含文件名和文件夹名。如果不需要文件夹名称,最好使用
If(ent->d_type==DT_DIR)
检查
ent->d_type
字段,阅读readdir的手册页,获取以下信息:

struct dirent {
               ino_t          d_ino;       /* inode number */
               off_t          d_off;       /* offset to the next dirent */
               unsigned short d_reclen;    /* length of this record */
               unsigned char  d_type;      /* type of file; not supported
                                              by all file system types */
               char           d_name[256]; /* filename */
           };
所以
ent->d_name
是一个字符数组。当然,你可以把它当作字符串

要摆脱
”。“

更新


生成的
ent
包含文件名和文件夹名。如果不需要文件夹名称,最好使用
If(ent->d\u type==DT\u DIR)
检查
ent->d\u type
字段。如果
d_name
是一个字符,那么使用
%s
打印它将是未定义的行为(更不用说使用一个字符存储整个文件名将需要一些惊人的数据压缩算法)。“d_name
的类型是什么?是字符串还是字符?”-您是否阅读了文档?可能是的副本。如果
d_name
是一个字符,那么使用
%s
打印它将是未定义的行为(更不用说使用一个字符存储整个文件名将需要一些惊人的数据压缩算法)。“d_name
的类型是什么?是字符串还是字符?”-您读过文档了吗?当然字符串类型的可能副本在C中并不存在(仅在C++中),因此所有字符串实际上都只是一个字符数组。@UltimateGobblement完全正确。当然字符串类型在C中不存在(仅在C++中),因此所有字符串实际上都只是一个字符数组。@UltimateGobblement完全正确。