c - C中的函数指针?
问题描述
我是 C 语言的初学者,正在学习 C 语言中的函数指针。那里我遇到了问题?
编写一个比较函数以按名称的第一个字符排序?
*int (firstnamecharcompar)(const void * a, const void * b))
这是我的代码解决方案。
#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];
//return ( *(char*)a[0] == *(char*)b[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");
}
for(i=0;i<3;i++)
{
printf("%s ",str[i]);
}
qsort(str,3,10,compare1);
for(i=0;i<3;i++)
{
printf("%s ",str[i]);
}
return 0;
}
但是我的代码在没有给出任何输出的情况下被终止了?我的代码有什么问题?
解决方案
qsort(str,3,10,compare1);
是错的。
您正在对指针数组进行排序。您需要传入指针的大小,而不是它指向的对象的大小。也就是说,sizeof(char*)
而不是10
.
推荐阅读
- java - 如何显示每行的数量
- x86-64 - PMC 计算软件预取是否命中 L1 缓存
- javascript - AWS:授权用户访问特定客户端
- swift - 为什么我的 AVFoundation Speech 不起作用?
- javascript - 提取后从 json 排序数组
- reactjs - 在 Rollup / Typescript / React 中编译代码的冲突问题
- angular - Angular ngFor在更改数组位置时重新渲染trackBy
- javascript - 有没有办法按顺序运行这个脚本?
- php - 如何在php中制作秒表
- node.js - 使用 Node.js SDK 上传到 Dropbox 的 Excel 文件无效