QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 689|回复: 5

高手的难题

[复制链接]
发表于 2003-4-2 14:27:03 | 显示全部楼层 |阅读模式
共有四个问题:关于kdevelop 关于输出内容(dir_demo1.c dir_demo2.c) 关于输出内容(main.c

dir_demo2.c) 关于定义
共有三个文件:main.c dir_demo1.c dir_demo2.c

问题一:在kdevelop怎么把main.c等文件输入成为一个工程而不用新建工程在每一个文件中输入(我没有

找到相关命令)
问题二:为仕么dir_demo1 dir_demo2仅定义的不同导致输出的不同
问题三:dir()作为main的接口却不能输出东西,提示错误segmentation fault;
问题四:为仕么dir_demo1中我将结构变量定义在char字符定义上就会导致是么东西都不能输出而出现

segmentation fault;


输出内容(问题二)dir_demo1  segmentation fault ;
                   dir_demo2  当前目录的内容;(正确的);
输出内容(问题三)main.c dir.c两个文件最后输出内容为当前目录的内容最后还带了一个segmentation

fault;
输出内容(问题四)dir_demo1 输出为segmentation fault,但是如果我把char定义和structure定义倒

过来放就
想dir.c中一样他会只输出当前目录的内容最后还带了一个segmentation fault
 楼主| 发表于 2003-4-2 14:27:39 | 显示全部楼层
/***************************************************************************
                          dir.c  -  description
                             -------------------
    begin                : Wed Apr 2 2003
    copyright            : (C) 2003 by root
    email                : [email protected]
***************************************************************************/

/***************************************************************************
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*                                                                         *
***************************************************************************/
#include <sys/stat.h>
#include <unistd.h>
#include &lt;ftw.h&gt;
#include &lt;stdio.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;dirent.h&gt;
#include &lt;time.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;

int dir(char* ccdir)
{
        char*cp;
        //char* ppb;
        char* cp1="&lt;DIR&gt;";
        char* cp2=" ";
        int d_s1,d_s2,f_s1,f_s2;//d_s1 is how many directories; d_s2 is how many bytes in

directory; f_s1 is how many files;f_s2 is how may bytes in file
        //char* gcd;

  DIR* apa;
        struct dirent* rpr;
        struct stat* sa;
        struct tm* ppa;



        d_s1=0;
        d_s2=0;
        f_s1=0;
        f_s2=0;

        cp=(char *)malloc(sizeof(char)*100);
        //ppb=(char *)malloc(sizeof(char)*100);
        //gcd=get_current_dir_name();
        //printf("%s",ccdir)
        if((apa=opendir(ccdir))==NULL)
        {
                printf("can't print directory name\n");
        }
        while((rpr=readdir(apa))!=NULL)
        {
                stat(rpr-&gt;d_name,sa);

                if((sa-&gt;st_mode)==16877)
                {
                        //cp="&lt;DIR&gt;";
                        strcpy(cp,cp1);
                        d_s1+=1;
                        d_s2+=sa-&gt;st_size;
                }
                else
                {
                        //cp=" ";
                        strcpy(cp,cp2);
                        f_s1+=1;
                        f_s2+=sa-&gt;st_size;
                }
                ppa=localtime(&amp;(sa-&gt;st_mtime));       
                //ppb=ctime(&amp;(sa-&gt;st_mtime));
                printf("%d-%d-%d         

%d:%d",(1900+ppa-&gt;tm_year),(1+ppa-&gt;tm_mon),ppa-&gt;tm_mday,ppa-&gt;tm_hour,ppa-&gt;tm_min);
                printf("%d           %s              %s\n",sa-&gt;st_size,cp,rpr-&gt;d_name);

        }
        printf("Total Directories:%d direcories         Total bytes:%d bytes\n",d_s1,d_s2);
        printf("Total Files:%d files         Total bytes:%d bytes\n",f_s1,f_s2);


        closedir(apa);
        free(cp);
        //free(ppa);
        //free(ppb);

        return 0;
回复

使用道具 举报

 楼主| 发表于 2003-4-2 14:29:45 | 显示全部楼层
前面dir.c漏了一个}本来有的,paste时漏了,不好意思
/***************************************************************************
                          dir_demo1.c  -  description
                             -------------------
    begin                : Wed Apr 2 2003
    copyright            : (C) 2003 by root
    email                : [email protected]
***************************************************************************/

/***************************************************************************
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*                                                                         *
***************************************************************************/
#include &lt;sys/stat.h&gt;
#include <unistd.h>
#include &lt;ftw.h&gt;
#include &lt;stdio.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;dirent.h&gt;
#include &lt;time.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;

int main()
{

        DIR* apa;
        struct dirent* rpr;
        struct stat* sa;
        struct tm* ppa;

        char*cp;
        char* ppb;
        char* cp1="&lt;DIR&gt;";
        char* cp2=" ";
        int d_s1,d_s2,f_s1,f_s2;//d_s1 is how many directories; d_s2 is how many bytes in

directory; f_s1 is how many files;f_s2 is how may bytes in file
        char* gcd;



        d_s1=0;
        d_s2=0;
        f_s1=0;
        f_s2=0;
       
        cp=(char *)malloc(sizeof(char)*100);
        //ppb=(char *)malloc(sizeof(char)*100);
        gcd=get_current_dir_name();
        //printf("%s",ccdir)
        if((apa=opendir(gcd))==NULL)
        {
                printf("can't print directory name\n");
        }
        while((rpr=readdir(apa))!=NULL)
        {
                stat(rpr-&gt;d_name,sa);
               
                if((sa-&gt;st_mode)==16877)
                {
                        //cp="&lt;DIR&gt;";
                        strcpy(cp,cp1);
                        d_s1+=1;
                        d_s2+=sa-&gt;st_size;
                }
                else
                {
                        //cp=" ";
                        strcpy(cp,cp2);
                        f_s1+=1;
                        f_s2+=sa-&gt;st_size;
                }
                ppa=localtime(&amp;(sa-&gt;st_mtime));       
                //ppb=ctime(&amp;(sa-&gt;st_mtime));
                printf("%d-%d-%d         

%d:%d",(1900+ppa-&gt;tm_year),(1+ppa-&gt;tm_mon),ppa-&gt;tm_mday,ppa-&gt;tm_hour,ppa-&gt;tm_min);
                printf("%d           %s              %s\n",sa-&gt;st_size,cp,rpr-&gt;d_name);
               
        }
        printf("Total Directories:%d direcories         Total bytes:%d bytes\n",d_s1,d_s2);
        printf("Total Files:%d files         Total bytes:%d bytes\n",f_s1,f_s2);


        closedir(apa);
        free(cp);
        //free(ppa);
        //free(ppb);
       
        return 0;
}
回复

使用道具 举报

 楼主| 发表于 2003-4-2 14:30:32 | 显示全部楼层
/***************************************************************************
                          main.c  -  description
                             -------------------
    begin                : Wed Apr  2 13:29:16 CST 2003
    copyright            : (C) 2003 by root
    email                : [email protected]
***************************************************************************/

/***************************************************************************
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*                                                                         *
***************************************************************************/

#ifdef HAVE_CONFIG_H
#include &lt;config.h&gt;
#endif

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include <unistd.h>

int main(int argc, char *argv[])
{
  char* gcd;
  gcd=get_current_dir_name();
  dir(gcd);
  return EXIT_SUCCESS;
}
回复

使用道具 举报

 楼主| 发表于 2003-4-2 14:44:56 | 显示全部楼层
另外在dir.c或dir_demo1.c或dir_demo2.c中的
printf("%d           %s              %s\n",sa->st_size,cp,rpr->d_name);
在kdevelop中都会出现
warning:int format ,_off_t arg(arg2)
警告!这句话什么意思?
回复

使用道具 举报

 楼主| 发表于 2003-4-3 09:21:30 | 显示全部楼层
问题达到解决,只要将sa定义为结构变量即可,错误原应是由于结构指针没有赋予内存空间所导致,谢谢 Zark(金陵五月)的帮组,在此再次感谢,希望以后继续探讨相关问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 06:27 , Processed in 0.035129 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表