如何将文件名添加到逗号分隔的字符串

时间:2017-09-14 08:48:48

标签: c arrays string

我正在使用下面的代码列出目录中的文件。如何将文件名添加到逗号分隔的字符串?

#include <dirent.h> 
#include <stdio.h> 
#include <string.h>
#include <stdlib.h>

int main(void)
{
  DIR           *d;
  struct dirent *dir;
  d = opendir("/home/test/filename_test");
  char *start = "";
  char *filename_list = strdup(start);

  if (d)
  {
    while ((dir = readdir(d)) != NULL)
    {
      int size = sizeof(dir->d_name);

      printf("%s\n", dir->d_name);

      printf("size of name is %d\n",size); 
    }

    closedir(d);
  }

  return(0);
}

1 个答案:

答案 0 :(得分:0)

这样做的一个简单方法是

  • 在循环之前使用strdup(“”)分配零字符,以null结尾的char *

  • 在每次迭代中增加它的大小。您可以使用realloc()来执行此操作,这将保留现有内容,并腾出空间来添加更多内容。您可以通过添加旧长度,文件名长度,逗号长度以及最终0的长度来计算新缓冲区的长度。

  • 使用strcat()将您的文件名等附加到缓冲区。

你需要一些逻辑来避免在列表的末尾加上逗号,而后面没有文件名。

这种方法的问题在于,由于重复的重新分配,它在某些系统中可能效率低下。一种更好的方法是使用缓冲区,在迭代时以块的形式调整大小。但是如果你要这样做,那么使用C已经存在的许多字符串处理库之一可能更容易。