你可以做:
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
。