我是C語言的初學者,正在學習C語言中的函式指標。在那里我遇到了一個問題?
寫一個比較函式,按名字的第一個字符排序?
*int (firstnamecharcompar)( const void * a, const void * b))
以下是我的代碼解決方案。
#include<stdlib.h>/span>
#include<stdio.h>/span>
#include <stdbool.h>/span>
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] ); //span>
}
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"/span>, str[i])。
printf("
")。)
}
for(i=0; i<3; i )
{
printf("%s"/span>,str[i])。
}
qsort(str,3,10, compare1)。
for(i=0; i<3; i )
{
printf("%s"/span>,str[i])。
}
return 0。
}
但是我的代碼被終止了,沒有給出任何輸出?我的代碼有什么問題嗎?
uj5u.com熱心網友回復:
qsort(str,3,10,compare1);是錯誤的。
你正在對一個指標陣列進行排序。你需要傳入指標的大小,而不是它所指向的物件的大小。也就是sizeof(char*),而不是10。
uj5u.com熱心網友回復:
#include<stdlib.h>
#include<stdio.h>/span>
#include <stdbool.h>/span>
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"/span>, str[i])。
printf("
")。)
}
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])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/315491.html
標籤:
