gpt4 book ai didi

c qsort 似乎删除了数组中的最后一个值

转载 作者:太空宇宙 更新时间:2023-11-04 00:22:46 25 4
gpt4 key购买 nike

我正在使用内置的 qsort 对结构数组进行排序。但是在调用 qsort 之后,数组中的最后一个元素似乎已经将我排序的值设置为空。

这是我的代码...

int numEntries = 5;
TvEntry* entries[numEntries]; //create array

//Entries get added to the array here...

qsort( *entries, numEntries, sizeof(TvEntry*), &compareByName ); //sort

displayAll( entries, numEntries ); //display

//here is my sort method
int compareByName( const void* val1, const void* val2 )
{
const TvEntry* entry1 = (TvEntry*)val1;
const TvEntry* entry2 = (TvEntry*)val2;
return strcasecmp( entry1->title, entry2->title );
}

//here is my display method
void displayAll( TvEntry* entries[], int length )
{
if( entries == NULL )
{
printf( "List is empty\n" );
}
else
{
int i = 0;
for( i = 0; i < length; i++ )
{
printf( "ENTRY: %s\n", entries[i]->title );
}
}
}

我应该提到,如果我注释掉调用 qsort 的行,那么所有条目都会正确显示,但是当调用 qsort 时,所有条目都会显示(未排序)并为最后一个条目的标题打印空白值。

最佳答案

 qsort( *entries, numEntries, sizeof(TvEntry*), &compareByName);

是错误的,您不想取消引用数组的第一个元素。做到这一点

 qsort(entries, numEntries, sizeof(TvEntry*), &compareByName);

此外,您的比较函数将接收指向元素的指针,而元素是指针,因此应该是例如

int compareByName( const void* val1, const void* val2 )
{
const TvEntry** entry1 = (TvEntry**)val1;
const TvEntry** entry2 = (TvEntry**)val2;
return strcasecmp( (*entry1)->title, (*entry2)->title );
}

关于c qsort 似乎删除了数组中的最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com