Я использую dirent.h
, чтобы увидеть все файлы в var/log
, и я хочу сохранить их в массиве, но когда я их сохраняю, он выглядит как цифры вместо строки. Почему это происходит?C - Получение чисел вместо строки
Код здесь:
char *word = ".gz" ;
char *word2 = ".";
char *word3 = "..";
DIR *directory;
struct dirent *dir;
directory = opendir("/var/log");
if (directory) {
while ((dir = readdir(directory)) != NULL)
{
if((strstr(dir->d_name, word) == NULL) && (strstr(dir->d_name, word2) == NULL) && (strstr(dir->d_name, word3) == NULL)) {
printf("%s\n", dir->d_name);
i++;
}
}
printf("%d\n",i);
closedir(directory);
}
char *array_of_files[i];
i=0;
directory = opendir("/var/log");
if (directory) {
while ((dir = readdir(directory)) != NULL)
{
if((strstr(dir->d_name, word) == NULL) && (strstr(dir->d_name, word2) == NULL) && (strstr(dir->d_name, word3) == NULL)) {
array_of_files[i]=dir->d_name;
printf("%d array of file \n",array_of_files[i]);
i++;
}
}
printf("%d\n",i);
int j;
for (j=0;j<i;j++){
printf("%d ", array_of_files[j]);
}
closedir(directory);
Во-первых, я использую счетчик, который подсчитывает количество файлов в папке, а затем я снова открыть каталог и создать массив с этим счетчиком, и начать спасения имена файлов в папке, но отображаются только цифры.
Пример этого:
./program
speech-dispatcher
dbconfig-common
apache2
mdm
fsck
samba
aptitude
dmesg
unattended-upgrades
postgresql
udev
installer
cups
hp
btmp
ConsoleKit
syslog
wtmp
mysql
lastlog
23
8962131 8962163 8962283 8962315 8962675 8962755 8962947 8963091 8963155 8963331 8963403 8963539 8963579 8963691 8963755 8964251 8964307 8964435 8964507 8964539 8964571 8964627 8964723
Я знаю, что есть лучший способ сделать массив вместо двух в то время как петли, но я не могу думать ни о чем лучше прямо сейчас; если вы можете порекомендовать что-то, это будет оценено по достоинству.
Если вы читаете [ 'readdir'] (http://man7.org/linux/man-pages/man3/readdir.3 .html), вы увидите абзац «Данные, возвращаемые readdir(), могут быть перезаписаны последующими вызовами readdir() для одного и того же потока каталогов». Это означает, что вы не можете просто скопировать указатель на имя, вам нужно скопировать фактическую строку. –