我使用下面的代码列出目录中的文件。如何将文件名添加到逗号分隔的字符串中?
#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/