我有这个结构:
typedef struct {
char *str;
...
} nameType;
我创建了一个新的指针实例,初始化其中的str指针(所有这些都已正确完成,我可以用printfs来检查它)。
nameType *names;
names = malloc( 10 * sizeof( nameType ) );
for ( i = 0; i < 10; i++ ) {
...
names[ i ].str = malloc( ... );
...
}
然后我想用bubblesort对它进行排序,但我却无法做到这一点。注意到我设法使用qsort,但经过几天的调试,测试,谷歌搜索等,我仍然无法找到它。排序代码:
for ( i = 0; i < n - 1; i++ ) {
for ( j = n - 1; j > i; j-- ) {
if ( strcmp( names[ i ].str, names[ j ].str ) > 0 ) {
nameType *tmp;
tmp = names[ i ];
names[ i ] = names[ j ];
names[ j ] = tmp;
}
}
}
(上面的代码只是我在排序时所做的一个例子 - 我已经尝试了很多变化,我的思绪将会受到打击。)
答案 0 :(得分:2)
names
用作nameType
的数组,但
nameType *tmp;
tmp = names[ i ];
您将names[i]
指定给指向nameType
的指针。设为nameType tmp;
。
当然要确保你没有超越names
的分配空间,因为@ another.anon.coward说,j
应该从n-1
开始。