当前位置:  技术问答>linux和unix

一段例目录下文件的程序(为何运行错误)

    来源: 互联网  发布时间:2015-10-20

    本文导语:  #include"myh.h" static long diroff=0; char *getfiles(char *path) {   DIR *dir;   struct dirent *pdir;   char buf[50];   if((dir=opendir(path))==NULL){     printf("n path error!n");     exit(-1);}   do    {  seekdir(dir,diroff);       pdir=read...

#include"myh.h"

static long diroff=0;
char *getfiles(char *path)
{
  DIR *dir;
  struct dirent *pdir;
  char buf[50];

  if((dir=opendir(path))==NULL){
    printf("n path error!n");
    exit(-1);}

  do
   {  seekdir(dir,diroff);
      pdir=readdir(dir);

      diroff=telldir(dir);

      if(!strcmp(pdir->d_name,".")||!strcmp(pdir->d_name,".."))
          continue;

      return(pdir->d_name);

   }while(pdir!=NULL);

   closedir(dir);

/*    if(pdir==NULL){
      printf("n readfile error!n");
      exit(-1);}
*/}

main(int argc,char *argv[])
{
    char buff[80];
   do {
    strcpy(buff,getfiles(argv[1]));
     printf(" %sn",buff);
    }
   while(buff!=NULL);
}
编译正常,运行也能实现功能就是最后报内存错误.

|
我修改了你的程序
#include 
#include 
#include 

static long diroff=0;

char *getfiles(char *path)
{
    DIR *dir;
    struct dirent *pdir;
    char buf[50];

    if ((dir=opendir(path))==NULL)
    {
        printf("n path error!n");
        exit(-1);
    }

    do
    {
        seekdir(dir, diroff);
        pdir=readdir(dir);
        diroff = telldir(dir);       // 0
        if (pdir == NULL) break;     // 1

        if (!strcmp(pdir->d_name, ".")||!strcmp(pdir->d_name, "..")) // 2
            continue;

        closedir(dir);
        return(pdir->d_name);
   } while (pdir!=NULL);  

   closedir (dir);
   return "";  // 3
}

main(int argc,char *argv[])
{
    char buff[80];
    do
    {
        strcpy(buff, getfiles(argv[1]));
        printf(" %sn",buff);
    } while (buff[0]); // 4
}
你的思路没有错误,但是以下几个方面要注意一下
1。在0处得到的pdir可能为空,所以在1处进行判断了,你的内存出错就是因为没有判断pdir为空,然后在2处调用了pdir->d_name,使得函数strcmp出错
2。如果没有返回值,应该返回空字符串,而不是空指针(3),如果返回空指针,strcpy将会出现内存错误,导致程序core dump。
3。opendir必须和closedir对应使用

|
pdir=readdir(...)
if (pdir != NULL) // 加上这句

|
你仔细阅读你的结构?有问题.

|
到最后你都把NULL付给path了.

|
正如LZ所说,getfiles中的循环是没有必要的

    
 
 

您可能感兴趣的文章:

  • http错误404-文件或目录未找到 错误的解决方法
  • 问个弱弱的问题错误卸载硬盘根目录怎么办/dev/sda1
  • 复制一个目录,出现错误can't create symbolic link
  • jsp提交到Servlet报404错误问题解决(webroot下子目录)
  • shell文件中第一行为#!/bin/bash ,运行后提示“:bad interpreter 没有那个文件或目录”是什么错误?怎么修改?
  • ubuntu在编译时提示 错误:stdio.h没有该文件或目录..怎是怎回事?我没动过stdio.h这些头文件怎没了呢?
  • 我昨天刚学java用的是JBuilder可是我用F9运行之后在classes目录中生成的.class文件为什么我在用java.exe application1时出现如下的错误呢
  • linux查看下级目录的时候可以,但是查看上级目录文件属性的时候出现了错误,求高手指点
  • 在etc/profile里面设置了搜索路径,为什么还是不能在其他目录下运行该目录下的文件?
  • 权限,怎样设置非root用户对目录的读写运行权限
  • >>>>> 程序移动目录有不能运行》》》》》
  • 已经编译好的类必须放到bin目录下才能运行吗?
  • 如何取得程序运行时的当前目录?
  • 如何通过进程号获得进程的一些信息,例如:进程运行的目录
  • 如何将mysql的数据文件移到指定目录,而且要保证mysql要运行正常.
  • 在Solaris上使用Motif开发,有什么函数可以得到当前程序运行的目录?
  • apache 指定CGI运行目录
  • java.io 莱鸟问题:程序运行时用到的文件应该放在哪个目录下?在线等待。。。
  • Linux下的菜问:运行当前目录下的文件,说找不到?
  • 为什么我没有/usr/spool/mail这个目录 我的crontab运行的结果从哪里查找啊
  • 如何让我的C程序能定时自动运行呢?并把输出结果放到指定目录下?
  • 求助,linux中修改了目录dir下的某个文件,相应的dir属性中的时间会与修改目录下文件的时间一致,这是怎么实现的? iis7站长之家
  • 怎么改变JSP运行的默认目录?我用的是jswdk
  • 送分! UNIX C编程。 程序中如何获得当前运行目录? .
  • 怎样让一个.SH文件在任何目录下都可以直接敲入文件名*.SH就可以运行?
  • jbuilder在运行程序时不能把工程文件放在临时目录,否则引起如下警告:
  • TMD奇怪,HTM和APPLET不在一个目录下的话,指定PATH就不能运行了?:-(
  • 如何让我的shell脚本在任何目录下都可以直接运行,而不需要加路径?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • python读文件,写文件操作以及目录操作
  • 写一个shell,把一个目录下所有的子目录中的文件移至本目录中,并且在文件名的前面加上子目录的文件夹名
  • 只给一个目录路径,怎样再在其下建立一个新的目录(给定目录名),然后再在其下建立一个新的文件(给定文件名)?
  • 想这么列出当前目录下的所有文件,及子目录的文件
  • 给出一个文件目录的路径,如何一次过删除所有在该目录下的文件?
  • 请问如何用grep命令来匹配指定目录下所有的文件(包括子目录下的文件)
  • 查找目录及子目录下所有文件中含有字符串‘CHINA’的文件
  • jbuilder7里如何不将jar文件解压到project工作目录的classes目录里,而直接测试现成的jar文件(不含.java文件)中的类和包
  • 用tar,如何使目录下的所有文件及目录压缩到一个文件中去?急!!!!!!!
  • jsp中如何获得当前jsp文件所在的目录,用request.getServletPath()得到的路径含有jsp文件名,有没有办法得到目录(不含文件名)?
  • 如果计算一个目录下面所有指定类型文件的数目和总大小(包括该目录下所有的子目录)
  • 请问LINUX行命令方式怎么COPY一个目录下所有文件和子目录到另一个目录下
  • 如何将目录下所有的子目录及文件复制到另一目录下
  • 求助,linux中修改了目录dir下的某个文件,相应的dir属性中的时间会与修改目录下文件的时间一致,这是怎么实现的?
  • 怎样用chown改变目录的所属用户和组时,怎样把这个目录下的子目录和所有子目录里的文件的所属用户和组都同时该了啊
  • cp目录和子目录,但不要文件
  • linux 怎样复制一个目录的所有文件到另一个目录?
  • 源代码分布在几个不同的目录中,如何在 Makefile 文件中,给出相应的目录??我不知道怎么将目录加进去!55555
  • 请问linux下如何在保留目录的情况下,删除目录中的多个文件?谢谢
  • 如何同步改动目录和目录里面文件的权限
  • 请问,一个目录(my_dir)下有很多子目录,每个子目录下有大量的文件,想删除my_dir,最好的方法是什么?谢谢
  • Linux下通过rpm安装软件详细介绍以及如何将软件安装到指定目录
  • 怎样在linux下用命令实现cp目录a下的子目录的所有内容到b目录中,只cp目录a的子目录内容???
  • 怎样在linux下用命令实现cp目录a下的字目录的所有内容到b目录中,cp子目录内容???
  • 为什么在我的linux7.0中,/usr/src/目录下只有redhat目录而没有linux目录?
  • 我的sun5.8工作站下目录下空间不够,其他目录还有空间,怎么把其他目录下的空间分配过来?
  • 大家知道在shell那里删除一个里面有内容的目录应该要用什么命令呢?注意,是有内容内目录啊,不是空目录!
  • 一个空的目录260g,里面有10个20g左右的子目录。如何删除该目录呢?
  • Solaris tar命令求教:如何在压缩一个目录的时候排除该目录下的某个子目录?
  • java里怎么怎样可以将这个目录和目录内的所有文件以及子目录一次全删掉阿
  • [参与者均有分] 如何在压缩一个目录的时候排除该目录下的某些深层子目录?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3