我正在使用下面的代码列出目录中的文件。如何将文件名添加到逗号分隔的字符串?
#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);
}
答案 0 :(得分:0)
这样做的一个简单方法是
在循环之前使用strdup(“”)分配零字符,以null结尾的char *
在每次迭代中增加它的大小。您可以使用realloc()来执行此操作,这将保留现有内容,并腾出空间来添加更多内容。您可以通过添加旧长度,文件名长度,逗号长度以及最终0的长度来计算新缓冲区的长度。
使用strcat()将您的文件名等附加到缓冲区。
你需要一些逻辑来避免在列表的末尾加上逗号,而后面没有文件名。
这种方法的问题在于,由于重复的重新分配,它在某些系统中可能效率低下。一种更好的方法是使用缓冲区,在迭代时以块的形式调整大小。但是如果你要这样做,那么使用C已经存在的许多字符串处理库之一可能更容易。