C: сортировка массива структуры указателя по ключу указателя - PullRequest
2 голосов
/ 02 февраля 2012

У меня есть такая структура:

typedef struct {
   char *str;
   ...
} nameType;

Я создаю новый экземпляр указателя, инициализирую указатель str внутри него (все это было сделано правильно, я могу сделать printfs, чтобы проверить его).

nameType *names;
names = malloc( 10 * sizeof( nameType ) );
for ( i = 0; i < 10; i++ ) {
    ...
    names[ i ].str = malloc( ... );
    ...
}

А потом я хочу отсортировать его с помощью пузырьковой сортировки, но у меня возникают проблемы с этим.Заметил, что мне удалось сделать это с помощью qsort, но после нескольких дней отладки, тестирования, поиска в Google и т. Д. Я все еще не могу его найти.Код сортировки:

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 Ответ

2 голосов
/ 02 февраля 2012

names используется как массив nameType, но

nameType *tmp;
tmp = names[ i ];

вы назначаете names[i] для указателя на nameType.Сделайте это nameType tmp;.

И, конечно же, убедитесь, что вы не превышаете выделенное пространство для names, как сказал @ another.anon.coward, j, вероятно, должно начинаться с n-1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...