字符串指针数组中的 C char qsort

C char qsort in array of pointers to strings

我有一个指向字符串的指针数组:

char *TAB[3] = { "dafafa", "alfkasf", "bafgr" };

我想对每个字符串中的字符进行排序。

我的比较功能:

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

并且在对其中之一尝试 qsort 时:

qsort(TAB[0], 6, sizeof(char), cmp);

该程序无法运行。 经过多次努力,我发现问题的原因在于将TAB[0]传递给qsort()

谁能解释为什么它不起作用以及如何解决这个问题?

如果你想对每个字符串中的字符进行排序,首先你必须确保你的字符串可以写入。按照目前的情况,您的字符串是只读的,因此如果不将它们的内容复制到允许写入的内存中,您就无法对它们的字符进行排序。

接下来你需要一个循环。由于您要单独对每个字符串进行排序,因此您需要遍历数组,并对每个项目调用 qsort 。初始项为TAB[i],长度为strlen(TAB[i])。您的 cmp 函数将起作用。