arrays - ANSI C : Insert elements to array

标签 arrays c ansi-c

将元素推送到数组的最简单方法是什么?

我有以下代码用于打印目录中的文件:

DIR *d;
struct dirent *dir;
d = opendir(".");

if (d) {
    while ((dir = readdir(d)) != NULL) {
        if (dir->d_type == DT_REG) {
            printf("%s\n", dir->d_name);
        }
    }
}
closedir(d);

这是输出:

File1.c
File2.c
File3.c

我想将它们添加到这样的数组中:

arr[] = {"File1.c","File2.c","File3.c"};

因此,我可以轻松调用任何给定的项目,例如 arr[1] 并获取 "File2.c"

我怎样才能做到这一点?

(几年前我学过C,但现在我不记得具体是怎么做的了)

最佳答案

您可以在需要时使用malloc()来分配空间。您创建一个指针数组,其中包含您将支持的最大文件数。然后填写由 malloc() 创建的内存指针,并将值复制到该位置。

char *arr[NUMBER_OF_FILES];
arr[i] = malloc(strlen(*(dir->d_name)) + 1);
strcpy(arr[i], *(dir->d_name));

您可以稍后访问这些元素:

printf(*(arr[0])) //this will output "File1.c"

更新:
正如 Ferdinand 在评论中所建议的,您可以使用 strdup() 来避免 malloc():

char *arr[NUMBER_OF_FILES];
arr[i] = strdup(dir->d_name);

Important:
Remember to use free() for all allocated memory to avoid memory leakage.

关于arrays - ANSI C : Insert elements to array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22802716/

相关文章:

C - 实现 Char * 数组的队列

c - 静态在 ANSI-C 中是什么意思

c++ - 动态内存分配的交叉编译器问题

c++ - 什么是堆栈?数组堆栈?数组队列?堆栈队列?它们在 C++ 中有何不同?

c - 我正在尝试创建一个数组并用 1 到 10 之间的数字填充它。为什么它不起作用?

c - 使用 free() 的 HTTP 客户端 : invalid pointer error while freeing contents of char **

c - c 中的 EOF block while 循环

c - 为什么 memcpy 在 32 位模式下使用 gcc -march=native 在 Ryzen 上对于大缓冲区很慢?

c - 带条件的变量定义,不带三元运算符

javascript - 在 Javascript/jQuery 中获取对象的长度