0

如何传递字符串数组的参数,例如 *p[50]?

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);
    }
    }

编码

4

3 回答 3

0

定义方法

char *arr_ofptr[];

填充其元素的示例。这里填充第一个元素

arr_ofptr[0] = "John Smith";

将此数组作为参数传递的方法

func(arr_ofptr,..

传递此数组的特定元素的方法

func(arr_ofptr[nth], ..
于 2013-06-20T08:54:29.040 回答
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

于 2013-06-20T08:46:40.723 回答
-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 *array传递数组第一个元素的地址。

我希望这有帮助..

于 2013-06-20T08:54:59.663 回答