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

时间:2013-09-05 16:11:36

标签: 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(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
}

我猜第一个赋值不起作用,因为它只是指向循环中char[256]的相同临时内存地址。

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

如何获得正确填充的阵列?

1 个答案:

答案 0 :(得分:2)

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

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