字符串指针数组中的 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
函数将起作用。
我有一个指向字符串的指针数组:
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
函数将起作用。