多线程 C qsort 字符数组

Multithread C qsort char array

我正在尝试按 C 中的键对一些记录进行排序。

M条记录,每条记录的语法为:

密钥 v -------- 数据 v

1234abcd。 abcdefghijklmnopqrstuvwxyzzzzzzzzzz

每条记录都有一个 8 字节的十六进制键值,后跟 64 字节的数据

过程如下:

现在我正在尝试定位 qsort 函数中的键,但出现分段错误。

我的打开文件成功后的代码

if((fstat(fileNum, &sb)) == -1) {
         printf("fstat fail");
         exit(-1);
    }  
int sb_size = sb.st_size;
int num_records = sb_size/REC_SIZE;

printf("SB SIZE: %d\n", sb_size);
printf("num_records: %d\n", num_records);

addr = (char *)mmap(NULL, sb_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fileNum, 0);

if (addr == MAP_FAILED) {
    close(fileNum);
    perror("Error mmapping the file");
    exit(EXIT_FAILURE);
}


int num_records_per_thread = num_records/num_threads;
printf("Number of Records per Thread = %d\n", num_records_per_thread);
qsort(addr, num_records_per_thread, REC_SIZE, compare);

int compare(const void *a, const void *b) {
        struct mRecord rec1, rec2;
        char *keya;
        strncpy(keya, (char *)a, 8);
        printf("in Compare: first 8 bytes are: %s", keya);
        return 1;
    }

这给了我一个分段错误。我怎样才能只定位键并对它们进行排序? 非常感谢。

1)不能用strncpy拷贝keya上的变量a,因为keya是一个未初始化的指针!

2) 函数比较必须return一个比较值!

然后在比较函数里面你可以这样写:

return strncmp( (char *)a, (char *)b, 8 ); //8 is the key length!