C/C++の宿題を片付けます 122代目
■ このスレッドは過去ログ倉庫に格納されています
0513デフォルトの名無しさん
2009/01/22(木) 21:28:06#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
int my_strlen(char *s){
int i = 0;
while (*(s++)) i++; return i;}
int my_strcmp(char *s1, char *s2){
for (;*s1 || *s2; s1++, s2++) {
if (*s1 != *s2) {
return *s1 - *s2; } } return 0;}
int cmp(const void *a, const void *b){ return my_strcmp(*(char **)a, *(char **)b);}
char *my_strncpy(char *s1, char *s2, int n){
int i; char *p = s1;
for (i = 0; i < n && (*(s1++) = *(s2++)); i++); return p;}
int main( int argc, char *argv[] ){
char *dir; DIR *dp; struct dirent *entry; char *s[127]; int i, j;
if (argc < 2) { dir = getenv("PWD"); /* カレントデイレクトリのパスを取得 */
} else { dir = argv[1]; }
if (( dp = opendir(dir) ) == NULL ) { /* デイレクトリを開く */
perror("opendir"); /* システムエラーメッセージを出力する */
exit( EXIT_FAILURE ); }
for (i = 0; (entry = readdir(dp)) != NULL && i < 127; ++i) {
s[i] = malloc(my_strlen(entry->d_name) + 1);
my_strncpy(s[i], entry->d_name, my_strlen(entry->d_name) + 1); }
if (entry) {
fprintf(stderr, "128個以上あるよ。ファイルが\n");
exit( EXIT_FAILURE ); }
closedir(dp);
qsort(s, i, sizeof(char *), cmp);
for (j = 0; j < i; ++j) { printf("%s\n", s[j]); free(s[j]); }
return 0;}
■ このスレッドは過去ログ倉庫に格納されています