我有一个字符串数组。不幸的是,字符串数组中每个字符串的大小不是恒定的,所以我不能这样做:
qsort(fileList, noOfFiles, sizeof(*fileList), compare);
并制作自定义比较功能。有什么可以替代的?
fileList 是文件名列表。声明为:char **fileList;
我不能这样做的原因是因为 qsort 有点盲目。为了找到下一个元素,它只是跳过所说的(第三个参数)内存单元。盲目地。如果使用可变长度字符串,则会导致随机行为。因为没有办法通过 qsort 识别字符串的开始和结束内存位置。
qsort 可用于 char *array[100]。
这是许多人要求的错误代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void *string1, const void *string2){
char *a = (char*)(string1);
char *b = (char*)(string2);
printf("comparing %s AND %s\n", a, b);
return strcasecmp(a,b);
}
void sortListName(char **fileList, int noOfFiles){
printf("Sorting\n");
qsort(fileList, noOfFiles, sizeof(char*), compare);
return;
}