你可以這樣做:
void sortnames(char **names, int low, int high, int num_names, int *sizes)
在這裏,您傳遞的第一個參數名的數組。第一個座標的大小必須是num_names
,所以您不會遇到分段故障問題。然後你可以傳遞每個字符串長度的數組的最後一個參數。最後一個參數的大小也必須是num_names
,然後sizes[i]
會指示字符串names[i]
的長度。
編輯:分段錯誤是,每當你訪問你不準在C.被觸摸,當你訪問數組元素越界一般到貨時間記憶,你會得到一個錯誤。爲了避免這種情況,您必須確保使用適當的malloc
調用爲陣列分配足夠的空間。所以,例如,爲了調用你的sortnames
函數,你應該在一個或多或少的字符串數組之前聲明(我多說或者少說,因爲我不知道你正在執行的上下文):
int num_names // This is the number of names you want to read
// Populate the variable num_names
// ...
char **to_sort = malloc(num_names * sizeof(char *));
int i;
for(i = 0; i < num_names; ++ i)
{
to_sort[i] = malloc(max_name_size); // Here max_name_size is a static value
// with the size of the longest string
// you are willing to accept. This is to
// avoid you some troublesome reallocation
}
// Populate the array with your strings using expressions like
// to_sort[i] = string_value;
//...
int *sizes = malloc(num_names * sizeof(int));
for(i = 0; i < num_names; ++ i)
{
sizes[i] = strlen(to_sort[i]);
}
sortnames(to_sort, 0, num_names, sizes);
並記住要終止您的字符串以避免調用strlen
時發生分段錯誤。
請問我每次編譯程序時都會遇到ubuntu 12.10的段錯誤,通常在結束語...分割故障(核心轉儲)。不明白意義。請分享更多的光在你的解釋,它會做我很好,並使用** arr []和* ARR []與每個差異。非常感謝。 –
@Adegbite飛利浦Mayokun發佈了一些修改建議,希望對您有所幫助。 – cgledezma