首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dirent.h用C语言实现ls程序

使用dirent.h用C语言实现ls程序
EN

Stack Overflow用户
提问于 2015-03-24 05:56:47
回答 1查看 2.7K关注 0票数 0

我正在尝试使用dirent库来实现ls程序。当我使用gdb进行调试时,我的目录* mydir似乎是<unspecified type>的,这告诉我好像我没有正确地包含dirent.h头文件,但我相信我正确地包含了所有必需的头文件。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h> 
#include <sys/stat.h>

//Specifies whether or not to print hidden files
#define PRINT_HIDDEN 0

void readDirectory(char *dirString[]);

int main(int argc,char* argv[]) 
{
if(argc!=2)
{
printf("Usage: ./ls <directory>\n");
}

readDirectory(argv);    

return 0;
}

void readDirectory(char *dirString[])    
{
DIR *mydir; 
struct dirent *entry;
//Opening the directory and checking if valid
mydir = opendir(dirString[1]);  

if(mydir==NULL){
fprintf(stderr,"ls: cannot access %s: No such file or directory\n",
  dirString);
exit(EXIT_FAILURE);
}   
//Printing directories/files in specified directory
while((entry==readdir(mydir))!=NULL);
{
if(PRINT_HIDDEN)
{
  printf("%s ",entry->d_name);
}
else
{
  if(entry->d_name[0]!='.')
  {
    printf("%s ",entry->d_name);
  }
}
}
printf("\n");
//Closing the directory
closedir(mydir);
}
EN

回答 1

Stack Overflow用户

发布于 2015-03-24 06:03:59

在糟糕的代码中隐藏着两个丑陋的bug:

代码语言:javascript
复制
while((entry==readdir(mydir))!=NULL);
{
    ...
}

改用下面的代码:

代码语言:javascript
复制
while ((entry = readdir(mydir)) != NULL) {
    ...
}

entry未初始化,编译时启用了警告,因为gcc -Wall会发现该问题。while条件末尾的额外;更难发现,请使用更一致的编程风格来避免此类错误。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29221224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档