[英]Writing a sorting function to sort an array of pointers, pointing to structures
我正在編寫一個函數來根據郵政編碼的值對指針數組進行排序,指向結構。 我在網上發現了一個排序函數(這是我第一次編寫排序函數),並認為我會玩它並看看會發生什么,我不斷得到錯誤“數組類型'char [7]不可分配'而且我是不知道為什么。有什么想法嗎?
謝謝。
struct personCatalog {
char name[50];
char address[50];
char cityState[50];
char zipCode[7];
} ;
#include <stdio.h>
#include "header.h"
#include <stdlib.h>
#include <string.h>
void bubble_sort(struct personCatalog *arrayOfPointers[]){
int num1 = 0;
while (arrayOfPointers[num1] != NULL) {
atoi(arrayOfPointers[num1++]->zipCode);
}
int progress = 0;
do {
int i;
progress = 0;
for (i = 0; i < num1 - 2; ++i) {
if (arrayOfPointers[i]->zipCode > arrayOfPointers[i + 1]->zipCode) {
struct personCatalog temp = *arrayOfPointers[i];
arrayOfPointers[i] = arrayOfPointers[i + 1];
arrayOfPointers[i + 1] = &temp;
progress = 1;
}
}
} while (progress);
}
C語言本身並不知道如何將7個字符分配給7個其他字符。 它只允許您一次將一種基本類型分配給另一種基本類型:
zipCode[0] = temp[0]
zipCode[1] = temp[1];
// etc.
要在C中復制連續的數組(如zipCode
,可以使用memcpy
:
memcpy(zipCode, temp, 7);
此外,我可能在我的小屏幕上誤讀了你的意圖,但你也不應該為zipCode分配一個結構指針。
這段代碼有幾個問題,但是你得到這個錯誤,因為你試圖在突出顯示的行中為數組賦值; 這就是為什么它抱怨分配給數組類型char[7]
。 這沒有多大意義,因為您無法更改數組的位置。 您可以通過調用memcpy
來交換字節,或者更可能更慣用地更改struct personCatalog
的定義,使得zipcode
是真正的char *
而不是char數組。
該數組由指針組成。 所以你用來交換它們的臨時性也應該是一個指針。
for (i = 0; i < num1 - 1; ++i) {
if ( strcmp( arrayOfPointers[i]->zipCode
, arrayOfPointers[i + 1]->zipCode
) > 1) {
struct personCatalog *temp ;
temp = arrayOfPointers[i];
arrayOfPointers[i] = arrayOfPointers[i + 1];
arrayOfPointers[i + 1] = temp;
progress = 1;
}
}
此外,循環條件i < num1-2
是錯誤的。 應該是num1 -1,IMO。
更新:看來zipcode是一個文本字符串,所以我將“>”替換為“strcmp()”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.