2020年2月9日 星期日

c qsort with string 用法

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int cmp(const void *a,const void *b)
{
    return strcmp(*(const char**)a,*(const char**)b);
}

int main()
{
    char *arr[] = {"eat", "teaa", "cat", "hat", "tata", "tae"};
    int size = 6;
    int i;
    qsort(arr,6,sizeof(char*),cmp);
    for(i=0;i<size;i++)
    {
        printf("%s ",arr[i]);
    }
    printf("\n");
    return 0;
}

cmp func中的a or b之意義為,array of string中的某一個element(即某一個string pointer)的位址,意即an pointer's address。

而關於strcmp(*(const char**)a,*(const char**)b),這一行中strcmp所需要吃的參數型態為const char*型態之字串,而a and b目前為const void*型態,故我們需要將他們轉型,首先先轉成前述an pointer's address,即an string's address's address之型態,故會先cast為const char**,cast完後a and b已是string's address's address,而strcmp的需求參數為const char*即為const string's address,故a and b只需要再加一個星號取值,即可拿到string' address並正確餵入strcmp func,故最後轉型方式為*(const char**)a,*(const char**)b。

沒有留言:

張貼留言