C语言编写按名称首字符排序的比较函数 代码运行终止无输出问题
问题原因
- 核心错误出在
compare1比较函数的指针转换逻辑
你定义的str是char[3][10]类型的二维字符数组,它的每个元素是长度为10的连续字符空间,不是独立的char*指针。qsort调用时传入比较函数的a、b参数,是指向数组元素首地址的指针,对应类型为char (*)[10]。
你当前写的*(char**)a是把传入的指针强制转成二级字符指针再解引用,相当于把字符数组里存储的字符串内容当成内存地址去访问,直接触发非法内存访问,导致程序崩溃无输出。
修复方案
仅需要修改compare1函数的转换逻辑即可:
int compare1(const void *a,const void *b) { // 直接把指针转成char*,指向当前待比较的字符串首地址 const char *c = (const char*)a; const char *d = (const char*)b; return c[0] - d[0]; }
补充说明:只有当你要排序的是
char*类型的指针数组(比如char *str[] = {"abc", "def", "ghi"})时,才需要用*(char**)a的写法解引用拿到字符串指针,二维字符数组和指针数组的内存布局完全不同,不能混用转换逻辑。
内容的提问来源于stack exchange,提问作者Hash include
相关产品推荐
相关产品推荐

