これにはいくつかのエントリがあることを知っていますが、それらを調べたところ、目的の場所にたどり着くことができませんでした。
ディレクトリの内容を読み取り、通常のファイルを別の関数に渡してアーカイブを構築できる関数を構築しています。
関数に渡すことができるitemsというアイテムのようなargv[]を作成しようとしています。問題は、ファイル名を入力する必要があることです。(多くの例で見たように)静的に宣言するのではなく、ファイル数に基づいてmallocを使用したいと思います。
クイックの関数ヘッダーは次のとおりです。
void quick(int argc, char *argv[])
追加機能は次のとおりです。
void append(char* argv[]){
struct dirent *dp;
int count, i = 3;
char *files;
char items [*files][255];
DIR *dirp = opendir(".");
if(dirp == NULL){
fail('f');
}
printf("ar: adding files in current directory to archive: %s", argv[2]);
while((dp = readdir(dirp)) != NULL){
if(dp->d_type == DT_REG){
count++;
}
}
rewinddir(dirp);
files = malloc(count*sizeof(char));
//copy argv[2] archive name, into files, so we can pass to quick
strcpy(items[2], argv[2]);
while((dp = readdir(dirp)) != NULL){
errno = 0;
dp = readdir(dirp);
//leave is dir is empty
if(dp == NULL)
break;
// Skip . and ..
if (strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0)
continue;
//if file is not the archive and a regular file add to list
if(strcmp(dp->d_name, argv[2]) != 0 && dp->d_type == DT_REG){
strcpy(items[i], dp->d_name);
i++;
}
}
closedir(dirp);
quick(i, items);
}
互換性のないポインター型としてitemsargでエラーが発生し、それらの謎をまだマスターしていないため、malloc(および場合によっては配列)を正しく実行しなかったと推測しています。