如何正确地将char数组复制到char数组?

如何正确地将char数组复制到char数组?,c,arrays,copy,C,Arrays,Copy,我在C方面是个新手,我正在努力让C例程正常工作 const char *filenames[entry_count]; for (i = 0; i < entry_count; i++) { char filename_inzip[256]; unz_file_info file_info; err = unzGetCurrentFileInfo(uf, &file_info, filename_inzip, sizeof(filen

我在
C
方面是个新手,我正在努力让C例程正常工作

const char *filenames[entry_count];
for (i = 0; i < entry_count; i++) {
    char filename_inzip[256];
    unz_file_info file_info;
    err = unzGetCurrentFileInfo(uf, &file_info, filename_inzip,
            sizeof(filename_inzip), NULL, 0, NULL, 0); 

    //This doesn't work. My array gets filled with the last entry over and over.
    filenames[i] = filename_inzip; //Option 1

    //Here I get SIGSEV errors, or gibberish in output when debugging values
    strcpy(filenames[i], filename_inzip); //Option 2
}
const char*文件名[entry_count];
对于(i=0;i
我猜第一个赋值不起作用,因为它只指向循环中
char[256]
的同一个临时内存地址

我认为第二个选项不起作用,因为我没有使用
malloc
或类似的方法


如何获得正确填充的数组?

第二个选项中需要分配内存是正确的

filenames[i] = strdup(filename_inzip);
这是最简单的方法

strdup
是一个Posix函数,而不是标准C。如果您无法使用它

filenames[i] = malloc(strlen(filename_inzip)+1);
if (filenames[i] != NULL) {
    strcpy(filenames[i], filename_inzip);
}
做同样的工作


请注意,您还必须为以后在程序中分配的每个数组元素调用
free

filenames[i]
不是
char
数组。这是一个指针。好的,我需要使用一个循环,然后在每个循环上免费调用吗?是的。注意不要对任何未赋值的元素调用
free
free(NULL)
的行为定义良好,因此在代码开始时将所有元素设置为
NULL
将允许您仅循环索引[0..entry\u count]以后不必担心实际分配了多少个元素。我想没有一种方法可以通过一次调用而不在循环中释放整个数组?没有。一般来说,对
malloc
的每次调用都必须有一次与
free
匹配的调用。如果在循环中调用
malloc
,那么您应该期望以后也在循环中调用
free