编写ls命令,文件名字字典序排列问题
下面是一段自己写的 ls 命令代码 这段代码只能显示 文件的名字
我想让文件名以字典序排列 方法是用 #include<algorithm> 的 排序函数sort
为了方便使用sort排序 自定义了保存文件名的数据结构
typedef struct node
{
char data[50];
};
我的问题:
如果把//sort(store,store+i,cmp2); 注释掉可以正常输出文件名,如果经过排序后,会显示内存出错之类一大堆的看不懂的。
下面是完整的代码 ls1.cpp
#include<iostream>
#include<sys/types.h>
#include<dirent.h>
#include<algorithm>
#include<string.h>
using namespace std;
typedef struct node
{
char data[50];
}node;
bool cmp(node,node);
void do_ls(char []);
int main(int ac, char * av[])
{
if( ac == 1)
do_ls(".");
else
{
while( --ac )
{
printf("%s:\n", *++av);
do_ls(*av);
}
}
return 0;
}
bool cmp2(node a,node b)
{
return strcmp(a.data,b.data);
}
void do_ls(char dirname[])
{
DIR *dir_ptr;
int i=0,j,len;
struct dirent *direntp;
node store[100];
if( (dir_ptr = opendir( dirname )) == NULL )
fprintf(stderr,"ls1:cannot open %s\n",dirname);
else
{
while( (direntp = readdir( dir_ptr )) != NULL )
{
len=strlen(direntp->d_name);
strncpy(store[i].data,direntp->d_name,len);
store[i++].data[len]='\0';
}
sort(store,store+i,cmp2);
for(j=0;j<i;j++)
printf("%s\n",store[j].data);
closedir(dir_ptr);
}
}