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

ubuntu下初学用C语言实现find,好像有字符的问题

    来源: 互联网  发布时间:2016-07-15

    本文导语:  用netbeans调试以下代码,希望实现find的简单功能 但为何发现file_name=direntp->d_name; file_name指向的字符串会出现“344270213”等的数据?这是什么码? strstr(file_name,search_name)!=NULL为何恒为真呢? #include #include #include #include ...

用netbeans调试以下代码,希望实现find的简单功能
但为何发现file_name=direntp->d_name;
file_name指向的字符串会出现“344270213”等的数据?这是什么码?
strstr(file_name,search_name)!=NULL为何恒为真呢?

#include
#include
#include
#include
#include

#define Max_Length 1000
void du_( int , char *[]);
void du_dir_down(char *);
void du_dir_up();
void du_x(char *,int);
void du_printf();
void find_(int, char *[]);
void find_x(char *,char *);
void find_printf(char *);

char du_dir[Max_Length];
int du_dir_len,du_start,find_num;
int main( int ac , char *av[] )
{
        char *cmd;
        ac=4;
        av[0]="./cmd";
        av[1]="-find";
        av[2]="arphic";
        av[3]="/home";

ac--;
if(ac==0){printf("lack of parametern");return 0;}
cmd=*++av;
if(cmd[0]!='-'){printf("please input the type of commondn");return 0;}
if(cmd[1]=='d'&&cmd[2]=='u')
{
du_(ac,av);
return 1;
}
        if(cmd[1]=='f'&&cmd[2]=='i'&&cmd[3]=='n'&&cmd[4]=='d')
{
find_(ac,av);
return 1;
}
printf("commond %s not foundn",cmd);
return 0;
}
void find_(int ac , char *av[])
{
    char *file_name;
    char *dir;
    if(ac==1)
    {
        printf("please input the name of the file that looking for");
        return;
    }
    ac--;file_name=*++av;
    if(ac==1)find_x(".",file_name);
    else find_x(*++av,file_name);
}
void find_x(char *dirname,char *search_name)//和du函数共用全局变量
{
        int i,len;
        DIR *dir_ptr;
        char *file_name;
struct dirent *direntp;
        
find_num=0;
for(len=0;dirname[len]!='';len++);
if(dirname[len-1]=='/')len--;
du_dir_len=len;
for(i=0;id_name;
if(file_name[0]=='.')continue;//跳过隐藏、自身或父文件
                        if(strstr(file_name,search_name)!=NULL);
                        {
                            printf("%s/%sn",du_dir,file_name);
                            find_num++;
                        }
du_dir_down(file_name);
find_printf(search_name);
}
closedir(dir_ptr);
}

}

void find_printf(char *search_name)
{
DIR *dir_ptr;
char *file_name;
struct dirent *direntp;
struct stat info;
if((dir_ptr=opendir(du_dir))==NULL)
        {   du_dir_up();    return;}
else{
while((direntp=readdir(dir_ptr))!=NULL)
{
file_name=direntp->d_name;
if(file_name[0]=='.')continue;//跳过隐藏、自身或父文件
                        if(strstr(file_name,search_name)!=NULL);
                        {
                            printf("%s/%sn",du_dir,file_name);
                            find_num++;
                        }
du_dir_down(file_name);
du_printf();
}
closedir(dir_ptr);
}
du_dir_up();
}


//du_du_du_du_du_du_du_du_du_du_du_du_du_du_du_du_du_du_du_du_du_du_du_du_du_du_
void du_( int ac , char *av[] )
{
int mode=0;
char *cmd;
if(ac==1)du_x(".",0);
        else
        {
            cmd=*(av+1);
            if(cmd[0]=='-')
            {
                ac--;
av++;
if(cmd[1]=='s')
{
mode=1;
}
                else printf("commond %s not foundn",cmd);
                if(ac==1)du_x(".",mode);
            }
            while(--ac)
                du_x(*++av,mode);
        }
}
void du_dir_down(char file_name[])
{
int i;
        du_dir[du_dir_len]='/';
for(i=0;file_name[i]!='';i++)
         du_dir[du_dir_len+i+1]=file_name[i];
        du_dir_len=du_dir_len+i+1;
du_dir[du_dir_len]='';
}
void du_dir_up()
{
for(;du_dir[du_dir_len]!='/';du_dir_len--);
du_dir[du_dir_len]='';
}
void du_x(char *dirname,int mode)
{ int i,len;
DIR *dir_ptr;
char *file_name;
struct dirent *direntp;

for(len=0;dirname[len]!='';len++);
if(dirname[len-1]=='/')len--;
du_dir_len=len;
for(i=0;id_name;
if(file_name[0]=='.')continue;//跳过隐藏、自身或父文件
du_dir_down(file_name);
du_printf(mode);
}
closedir(dir_ptr);
}
}
void du_printf(int mode)
{
DIR *dir_ptr;
char *file_name;
struct dirent *direntp;
struct stat info;
if((dir_ptr=opendir(du_dir))==NULL)
{
if(du_startd_name;
if(file_name[0]=='.')continue;//跳过隐藏、自身或父文件
du_dir_down(file_name);
du_printf(mode);
}
closedir(dir_ptr);
}
du_dir_up();
}

|
if(strstr(file_name,search_name)!=NULL); 行尾多了个分号
                      {
                            printf("%s/%sn",du_dir,file_name);
                            find_num++;
                        } 
if行尾多了个分号,不管strstr返回什么,大括号里面的都要执行的

    
 
 

您可能感兴趣的文章:

  • 我是初学者,请教光盘安装ubuntu!!!
  • 初学Linux 学ubuntu合适还是RedHat更合适些?
  • 我初学ubuntu 想装ftp,但是出错,请大家帮看看
  • 初学LINUX,请大家教我怎么设置Ubuntu server 上网?
  • 初学linux,c++ 遇ubuntu的qt安装问题
  • Ubuntu11.04版本进入字符界面问题
  • ubuntu不能停留在字符界面是什么情况?
  • ubuntu 终端字符提前回车并覆盖PS1提示符内容
  • 关于ubuntu字符界面系统console显示多国语言
  • ubuntu9.10 如何启动字符界面?
  • ubuntu中怎么从图形界面进入字符界面
  • 刚接触linux,ubuntu字符模式下一些显示乱码?
  • 不能进入ubuntu纯字符控制台
  • ubuntu 进不了字符模式 求解
  • ubuntu10.10修改开机分辨率过小问题后,字符界面下ctrl+alt+f2(3,..,6)不能调出新console发表于 : 2011-04-18 13:
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 不显示删除回复显示所有回复显示星级回复显示得分回复 ubuntu 安装mysql源码失败,好像是没有找到hostent_data的定义。急~~~~~~~~~~
  • Ubuntu 12.04长期支持版和最新版Ubuntu 13.10下载
  • vmware里装了Ubuntu后Ubuntu.vmdk文件大小和Ubuntu系统大小区别?
  • Ubuntu查看系统信息命令介绍
  • win7与Ubuntu双系统卸载ubuntu
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • 装ubuntu的时候选安装ubuntu与win7共存与选其他选项
  • Ubuntu查看硬盘,分区相关命令介绍
  • winxp+ubuntu32+ubuntu64是否可以这样装系统?
  • Ubuntu系统安装及升级命令
  • ubuntu能安装rpm包吗&&ubuntu的intel 945显卡驱动
  • Ubuntu Precise 12.04 (LTS) (64-bit)下面安装docker
  • 在win7下装ubuntu成功后进不去ubuntu!!??
  • Ubuntu Raring 13.04 和 Saucy 13.10 (64 bit)下面安装docker
  • 原来已安装好ubuntu,因系统崩溃,重装WINXP系统,如何再次登录ubuntu系统?
  • Ubuntu Trusty 14.04 (LTS) 下面安装docker及依赖关系检查
  • ubuntu10.10 和 ubuntu 10.04.1
  • Ubuntu Vivid 15.04 下面安装docker的详细步骤
  • Ubuntu 中的 ubuntu one 算不算的上云?
  • ubuntu系统中软件安装、卸载以及查询是否已经安装某个软件包的方法
  • 安装ubuntu11.04时,过了ubuntu的logo花屏,怎么解决
  • Ubuntu查看内存,进程相关命令介绍
  • 我想根据ubuntu官网上介绍的方法安装ubuntu,是否应该先分一块硬盘空间?


  • 站内导航:


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

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

    浙ICP备11055608号-3