[英]basic qsort on string array crashes in qsort()
根据gdb,我尝试使用qsort创建一些基本代码以对字符串数组进行排序,但是在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);
}
static int pcmp(const void * a, const void * b)
{
return strcmp( (const char *) a, (const char *) b);
}
int main()
{
char pn[10][256];
strcpy(pn[0], "hello");
strcpy(pn[1], "TEST");
strcpy(pn[2], "abc");
strcpy(pn[3], "000000");
qsort(pn, 4, sizeof (char [256]), pcmp);
return 0;
}
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.