im ищет код, который будет рекурсивно перечислять все каталоги и файлы каталога, заданного по аргументу в программировании на языке C, ive найти код для поиска (ниже), но я не понимаю функцию snprintf и, в частности,/", Я бы предпочел использовать strcat или другую системную функцию для переопределения функции sprintf, но я не вижу, как я не понимаю, что здесь делает snprintf. Heres код:Рекурсивно перечислить каталоги в C
int is_directory_we_want_to_list(const char *parent, char *name) {
struct stat st_buf;
if (!strcmp(".", name) || !strcmp("..", name))
return 0;
char *path = alloca(strlen(name) + strlen(parent) + 2);
sprintf(path, "%s/%s", parent, name);
stat(path, &st_buf);
return S_ISDIR(st_buf.st_mode);
}
int list(const char *name) {
DIR *dir = opendir(name);
struct dirent *ent;
while (ent = readdir(dir)) {
char *entry_name = ent->d_name;
printf("%s\n", entry_name);
if (is_directory_we_want_to_list(name, entry_name)) {
// You can consider using alloca instead.
char *next = malloc(strlen(name) + strlen(entry_name) + 2);
sprintf(next, "%s/%s", name, entry_name);
list(next);
free(next);
}
}
closedir(dir);
}
из How to recursively list directories in C on LINUX
Хорошо, моя программа работает, но теперь я хочу, чтобы сохранить все файлы и директории, выводимой в файл, как я запустить свою программу ./a.out. > Буфер, где буфер содержит то, что программа должна напечатать на оболочке
Ух ... какой вызов snprintf? В фрагменте кода нет. Если вы не понимаете, что он делает, почему бы вам не взглянуть на то, что он делает? http://www.cplusplus.com/reference/cstdio/snprintf/ –
в чем проблема с sprintf точно? он просто конкатенирует 3 строки - имя, "/" и имя_пользователя. –
Я думаю, что sprintf создает всю проблему –