• 5607阅读
  • 18回复

段错误 [复制链接]

上一主题 下一主题
离线guozanjie
 
只看楼主 正序阅读 楼主  发表于: 2010-01-21
想打印出根目录下的文件与文件夹名,
运行下面程序时,出现段错误,错误应该是出现在红色部分,本人初学,请高手们指点指点!
QDir dir1;
dir1.setPath("/");
dir1.setFilter( QDir::Files | QDir::Dirs | QDir::NoSymLinks );
dir1.setSorting( QDir::Name );


const QFileInfoList *list = dir1.entryInfoList();

QFileInfoListIterator it( *list );

QFileInfo *fi;
while ( (fi = it.current()) != 0 ) {
printf( "%s\n" , fi->fileName() );
++it;
}
离线guozanjie
只看该作者 18楼 发表于: 2010-01-22
哦哦!多谢高手们!我试试!
离线午小夜

只看该作者 17楼 发表于: 2010-01-22
。。。用qDebug(), qWarning()吧。
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线xinqingfly

只看该作者 16楼 发表于: 2010-01-22
QString是不能直接print的,你可以qDebug()<<str;
菜鸟也是鸟
离线午小夜

只看该作者 15楼 发表于: 2010-01-22
換成  fi->filePath()  再試試
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线guozanjie
只看该作者 14楼 发表于: 2010-01-22
确定问题了,,
我先定义了一个QString name
然后 name = fi -> fileName();

运行过并不出错,

然后printf( “%s\n”, name );
段错误的问题就出现了

应该是用%s来打印QString不可以吧?应该怎么样改呢?

高手高手!呼叫高手
离线yangfanxing
只看该作者 13楼 发表于: 2010-01-22
没法儿试,,,你怎么不说是你的printf错了呢???
换做qDebug()试试看吧啊~
PHPWind好恶心。。。不想看这种界面。。。
离线guozanjie
只看该作者 12楼 发表于: 2010-01-22
引用第6楼yangfanxing于2010-01-22 11:29发表的  :
这个好像是一个example,本不会出毛病吧~~~只要头文件包含好了的话。。。



QFileInfo这个类应该是可以用的了

我做了一个测试

    dir1.setPath("/");
        dir1.setFilter( QDir::Files |  QDir::Dirs | QDir::NoSymLinks );
        dir1.setSorting( QDir::Name );


        const QFileInfoList *list = dir1.entryInfoList();

        QFileInfoListIterator it( *list );

        QFileInfo *fi;
        while ( (fi = it.current()) != 0 ) {
        //      printf( "%s\n" , fi->fileName() );
        printf( "%s\n" , "abc" );

                ++it;
        }


打印出了40句abc,我根目录下也是四十个文件夹,看来是fi->fileName()出问题了
离线guozanjie
只看该作者 11楼 发表于: 2010-01-22
引用第9楼water_wf于2010-01-22 13:28发表的  :
不管QFileInfoListIterator那里来的,
it.current()这种写法肯定是错误的,
一般应该是while(it.hasNext()){xxxxxx}
离线guozanjie
只看该作者 10楼 发表于: 2010-01-22
高手们,问题确实出现在

fi->fileName()

我屏蔽掉那一句就没出错了。
离线water_wf

只看该作者 9楼 发表于: 2010-01-22
不管QFileInfoListIterator那里来的,
it.current()这种写法肯定是错误的,
一般应该是while(it.hasNext()){xxxxxx}
离线午小夜

只看该作者 8楼 发表于: 2010-01-22
fi->fileName()
有可能  fi 是 兩個目錄 . 和 ..
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线xinqingfly

只看该作者 7楼 发表于: 2010-01-22
你的fileName()返回的是QString
菜鸟也是鸟
离线yangfanxing
只看该作者 6楼 发表于: 2010-01-22
这个好像是一个example,本不会出毛病吧~~~只要头文件包含好了的话。。。
PHPWind好恶心。。。不想看这种界面。。。
离线nmiirq

只看该作者 5楼 发表于: 2010-01-22
引用楼主guozanjie于2010-01-21 18:31发表的 段错误 :
想打印出根目录下的文件与文件夹名,
运行下面程序时,出现段错误,错误应该是出现在红色部分,本人初学,请高手们指点指点!
QDir dir1;
dir1.setPath("/");
dir1.setFilter( QDir::Files | QDir::Dirs | QDir::NoSymLinks );
dir1.setSorting( QDir::Name );
.......


将下面的:
dir1.setFilter( QDir::Files | QDir::Dirs | QDir::NoSymLinks );
改成:
dir1.setFilter( QDir::Files | QDir::AllDirs | QDir::NoDotAndDotDot | QDir::NoSymLinks );
试试!

离线午小夜

只看该作者 4楼 发表于: 2010-01-22
一般段错误是因为指针、内存分配方面的原因,也可能是因为库的版本不兼容,你主要从这几个方面查吧
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线benbenmajia

只看该作者 3楼 发表于: 2010-01-22
报的什么错类,段错误?
安然.....
离线yangfanxing
只看该作者 2楼 发表于: 2010-01-21
QFileInfoListIterator这个typedef很诡异;
不知道该包含哪个头文件。。。
PHPWind好恶心。。。不想看这种界面。。。
离线guozanjie
只看该作者 1楼 发表于: 2010-01-21
高手高手!
快速回复
限100 字节
 
上一个 下一个