История изменений
Исправление
vertexua,
(текущая версия)
:
#include <dirent.h>
#include <stdio.h>
#include <glib.h>
void g_string_free_default(GString* data) {
g_string_free(data, TRUE);
}
void print_g_string(GString* gstr, gpointer userdata) {
printf("%s\n", gstr->str);
}
int main(int argc, char* argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage %s DIR\n", argv[0]);
return 1;
}
DIR* dir = opendir(argv[1]);
if (dir==NULL) {
perror("opendir");
return 1;
}
GPtrArray* array = g_ptr_array_new_with_free_func(
(GDestroyNotify)g_string_free_default);
for (struct dirent* ent = readdir(dir); ent != NULL; ent = readdir(dir)) {
g_ptr_array_add(array, g_string_new(ent->d_name));
}
closedir(dir);
g_ptr_array_foreach(array, (GFunc)print_g_string, NULL);
g_ptr_array_free(array, TRUE);
return 0;
}
;) Вот он код на С, в стиле функционального программирования. Шутка конечно.
Но тебе незачет за такой банальный подход, мол вот фичи в языке нету сейчас заставлю кого-то написать короткий код который в это упирается.
Исходная версия
vertexua,
:
#include <dirent.h>
#include <stdio.h>
#include <glib.h>
void g_string_free_default(GString* data) {
g_string_free(data, TRUE);
}
void print_g_string(gpointer ptr, gpointer userdata) {
printf("%s\n", ((GString*)ptr)->str);
}
int main(int argc, char* argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage %s DIR\n", argv[0]);
return 1;
}
DIR* dir = opendir(argv[1]);
if (dir==NULL) {
perror("opendir");
return 1;
}
GPtrArray* array = g_ptr_array_new_with_free_func(
(GDestroyNotify)g_string_free_default);
for (struct dirent* ent = readdir(dir); ent != NULL; ent = readdir(dir)) {
g_ptr_array_add(array, g_string_new(ent->d_name));
}
closedir(dir);
g_ptr_array_foreach(array, print_g_string, NULL);
g_ptr_array_free(array, TRUE);
return 0;
}
;) Вот он код на С, в стиле функционального программирования. Шутка конечно.
Но тебе незачет за такой банальный подход, мол вот фичи в языке нету сейчас заставлю кого-то написать короткий код который в это упирается.