私は、コマンドの並べ替えの機能の一部を実装するためのMac OSを使用しています:私のコードの 一部は以下の通りです:私のqsortがLinuxで何が問題になっていますか?
int compare(const void *p, const void *q) {
return strcmp(*(char **)p, *(char **)q);
}
void sort_file(char *filename, int unique, int reverse) {
/* TODO: Complete this function */
/* Note: you will probably need to implement some other functions */
char buf[1024][1024];
int i=0;
FILE * fp;
if(!(fp=fopen(filename,"r"))){
perror("Open error!");
exit(0);
}
while(fgets(buf[i],1024,fp)){
printf("%s",buf[i]);
i++;
}
qsort(buf, i, sizeof(char *), compare);
}
結果を常にsegmentation fault: 11
誰もが問題だものを私に伝えることができて、それを修正する方法を示していますか?
私が知りたいことは、コードの最大サイズがファイル内で1行でわからない場合、どのように配列を定義するのですか?
私は、このページからアイデアを得る: http://www.anyexample.com/programming/c/qsort__sorting_array_of_strings__integers_and_structs.xml
あなたのストライドは完全に間違っています。 'sizeof(char *)'は 'sizeof * buf'でなければなりません(btwは' char * 'より大きい大胆なロットです)。それについて考えてみて、コンパレータの変更方法を検討してください。最初に – WhozCraig
をqsort(buf、i、1024、compare)と書いていますが、同じ問題 –
誰もがなぜdownvoteですか? :< –