C:通过指针键对指针结构数组进行排序

时间:2012-02-02 14:19:12

标签: c arrays sorting pointers struct

我有这个结构:

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;
        }
    }
}

(上面的代码只是我在排序时所做的一个例子 - 我已经尝试了很多变化,我的思绪将会受到打击。)

1 个答案:

答案 0 :(得分:2)

names用作nameType的数组,但

nameType *tmp;
tmp = names[ i ];

您将names[i]指定给指向nameType的指针。设为nameType tmp;

当然要确保你没有超越names的分配空间,因为@ another.anon.coward说,j应该从n-1开始。