函数指针在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

#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, sizeof(char *), compare1); //HERE WAS AN ERROR!
for (i=0; i<3; i++) {
printf("%s ", str[i]);
}
return 0;
}

qsort的第三个参数取数组元素的大小(在你的例子中数组包含char*,而不是char[10])

相关内容

  • 没有找到相关文章

最新更新