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

标签 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);
}

最佳答案

实现此目的的一种简单方法是

  • 在循环之前使用 strdup("") 分配一个零字符、以 null 结尾的 char*

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

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

您需要一些逻辑来避免在列表末尾放置逗号,因为逗号后面没有文件名。

这种方法的问题是,由于重复的重新分配,它在某些系统中可能效率低下。更好的方法是使用在迭代时按 block 调整大小的缓冲区。但如果您打算这样做,那么使用 C 语言中已有的众多字符串处理库之一可能会更容易。

关于c - 如何将文件名添加到逗号分隔的字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46214520/

相关文章:

c - MPI_Gatherv 负计数错误

c - 分配和重新分配结构及其元素

TCL 中的类 C 数组

c# - 使用 C# 绘制具有透明背景的字符串?

c++ - 检查用户是否输入了空白 C++

‘time_t’ 之前的 C 错误预期说明符限定符列表

c - 使用未声明的标识符 'true'

java - 为什么 Java String.indexOf() 优于用户定义类中实现的相同逻辑?

php - 如何从php数组中删除元素

Python zip 方法和舍入行为