2013-06-20 52 views

回答

0

你可以這樣做:

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時發生分段錯誤。

+0

請問我每次編譯程序時都會遇到ubuntu 12.10的段錯誤,通常在結束語...分割故障(核心轉儲)。不明白意義。請分享更多的光在你的解釋,它會做我很好,並使用** arr []和* ARR []與每個差異。非常感謝。 –

+0

@Adegbite飛利浦Mayokun發佈了一些修改建議,希望對您有所幫助。 – cgledezma

0

方法來定義

char *arr_ofptr[]; 

實施例以填充其elements.Here填充第一元件

arr_ofptr[0] = "John Smith"; 

方法傳遞該數組作爲參數

func(arr_ofptr,.. 

方法傳遞perticular元件此陣列

func(arr_ofptr[nth], .. 
-1

,你可以這樣做:

void sortnames(char *array,int low,int high) 
{ 

int mid; 
if(low<high) 
{ 
    mid=(low+high)/2; 
    sortnames(array,low,mid); 
    sortnames(array,mid+1,high); 
    mergeSort(array,low,mid,high); 
} 

}

的char *數組你傳遞數組..

我希望這會幫助的拳頭元素的地址。