我的代碼將一系列單詞作為命令列引數,并且應該使用 qsort 對它們進行排序。現在我列印出原始的 Args,但是當它列印 Sorted args 時,我收到了一個分段錯誤。C新手,感謝所有建議。
#include <stdlib.h>
#include <string.h>
int stringCmp(const void *str1, const void *str2); //Function prototype.
int main (int argc, char *argv[])
{
int i;
char **arr = malloc(argc * sizeof(char *));
printf("Original Args:\n");
for (i = 0; i < argc-1; i ){
arr[i] = argv[i 1];
printf("%s\n",arr[i]);
}
qsort(arr, argc, sizeof *arr, stringCmp);
printf("\nSorted Args:\n");
for (i = 0; i < argc; i ){
printf("%s\n", arr[i]);
}
free (arr);
return 0;
}
int stringCmp(const void *str1, const void *str2)
{
strcmp(str1, str2);
}
uj5u.com熱心網友回復:
您的比較函式沒有回傳任何內容。此外,此函式獲取陣列元素的地址,因此您實際得到的是char * const *,而不是void *
你要:
int stringCmp(const void *str1, const void *str2)
{
const char * const *s1 = str1;
const char * const *s2 = str2;
return strcmp(*s1, *s2);
}
您也沒有將正確數量的元素傳遞給qsort. 應該是argc-1,不是argc。列印串列也是如此:
qsort(arr, argc-1, sizeof *arr, stringCmp);
printf("\nSorted Args:\n");
for (i = 0; i < argc-1; i ){
printf("%s\n", arr[i]);
}
uj5u.com熱心網友回復:
對于初學者,您傳遞的元素數量無效
qsort(arr, argc, sizeof *arr, stringCmp);
你需要寫
qsort(arr, argc - 1, sizeof *arr, stringCmp);
其次,該函式stringCmp不回傳任何內容,并且在呼叫strcmp. 它應該看起來像
int stringCmp(const void *str1, const void *str2)
{
return strcmp( *( const char ** )str1, *( const char ** )str2);
}
uj5u.com熱心網友回復:
這里也有一個
for (i = 0; i < argc; i ) {
printf("%s\n", arr[i]);
}
應該
for (i = 0; i < argc - 1; i ) {
printf("%s\n", arr[i]);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/430172.html
上一篇:矩陣中出現頻率最高的元素
