我尝试使用 qsort 创建一些基本代码来对字符串数组进行排序,但根据 gdb,它在 qsort 中崩溃了:
#include <string.h>
#include <stdlib.h>
static int pcmp(const void * a, const void * b)
{
return strcmp(* (char * const *) a, * (char * const *) b);
}
int main()
{
char pn[10][256];
memset(pn, 0, sizeof(char) * 10 * 256);
strcpy(pn[0], "hello");
strcpy(pn[1], "TEST");
strcpy(pn[2], "abc");
strcpy(pn[3], "000000");
qsort(pn, 4, sizeof (char *), pcmp);
}
最佳答案
qsort(pn, 4, sizeof (char *), pcmp);
你告诉qsort
你要排序的是一个4个char*
的数组,但是
char pn[10][256];
实际上,pn
是一个10个char[256]
的数组。这些东西与布局不兼容,qsort
将 char[256]
的第一个字节解释为 char*
。这是未定义的行为,不太可能导致段错误。
要针对这种特殊情况修复它,您可以将比较更改为
static int pcmp(const void * a, const void * b)
{
return strcmp((const char *) a, (const char *) b);
}
和调用
qsort(pn, 4, sizeof pn[0], pcmp);
关于c - 字符串数组上的基本 qsort 在 qsort() 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17639290/