如何正确地将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
。