#include /* setlocale */ #include /* wprintf */ #include /* calloc, free, qsort, EXIT_* */ #include /* mbstowcs */ #include /* wcscoll */ static int my_collate(const void *p1, const void *p2) { return wcscoll(*(const wchar_t **)p1, *(const wchar_t **)p2); } int main(void) { char *loc; const char *stuff[5] = { "bug", "Amy", "Tom", "Gaz", "cat" }; wchar_t *strs[5]; setlocale(LC_ALL, "en_US.UTF-8"); loc = setlocale(LC_ALL, NULL); if(loc == NULL || strcmp(loc, "en_US.UTF-8") != 0) { perror("setlocale"); return EXIT_FAILURE; } for(int i = 0; i < 5; i++) { strs[i] = calloc(sizeof(wchar_t), 4); mbstowcs(strs[i], stuff[i], 3); } qsort(&strs, 5, sizeof(wchar_t *), my_collate); for(int i = 0; i < 5; i++) { wprintf(L"%ls\n", strs[i]); free(strs[i]); } return EXIT_SUCCESS; }