C语言使用qsort按字符串首字符排序时代码终止无输出问题排查
问题原因
- 核心错误为
qsort函数的第三个参数配置错误:你定义的str是char*类型数组,每个数组元素的本质是指向字符串的指针,因此每个元素的大小为指针占用的字节数,而非你填写的10。错误的元素大小会导致qsort计算内存偏移时出错,访问非法内存触发段错误,最终程序直接终止无输出。 - 比较函数的逻辑本身是正确的,无需修改。
修正方案
仅需要将qsort调用行修改为:
qsort(str, 3, sizeof(char*), compare1);
完整可运行代码
#include<stdlib.h> #include<stdio.h> #include <stdbool.h> int compare1(const void *a,const void *b) { char *c = *(char**)a; char *d = *(char**)b; return c[0] - d[0]; } int main() { char* str[3]; int i; for(i=0;i<3;i++) { str[i] = (char*)malloc(10*sizeof(char)); } for(i=0;i<3;i++) { printf("Enter %d string => " , i+1 ); scanf("%s", str[i]); printf("\n"); } printf("Before sort: "); for(i=0;i<3;i++) { printf("%s ",str[i]); } printf("\n"); // 修正qsort的第三个参数为指针大小 qsort(str,3,sizeof(char*),compare1); printf("After sort: "); for(i=0;i<3;i++) { printf("%s ",str[i]); } printf("\n"); // 补充内存释放避免泄漏 for(i=0;i<3;i++) { free(str[i]); } return 0; }
内容的提问来源于stack exchange,提问作者Hash include
相关产品推荐
相关产品推荐

