0

私はかなりの初心者で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]ループ内の同じ一時メモリアドレスを指しているだけなので、最初の割り当ては機能しないと思います。

malloc2番目のオプションは、使用していないか、類似していないため、機能しないと思います。

適切に満たされた配列を取得するにはどうすればよいですか?

4

1 に答える 1

2

2 番目のオプションでメモリを割り当てる必要があることは正しいです。

filenames[i] = strdup(filename_inzip);

これを行う最も簡単な方法です。

strdup標準の C ではなく Posix 関数です。

filenames[i] = malloc(strlen(filename_inzip)+1);
if (filenames[i] != NULL) {
    strcpy(filenames[i], filename_inzip);
}

同等の仕事をします

freeプログラムの後半で割り当てる各配列要素に対しても呼び出す必要があることに注意してください。

于 2013-09-05T16:13:05.570 に答える