0

我正在编写一个函数来根据邮政编码的值对指向结构的指针数组进行排序。我在网上找到了一个排序函数(这是我第一次编写排序函数),我想我会玩弄它,看看会发生什么,我一直收到错误“数组类型'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);
    }

我收到的错误

4

3 回答 3

1

这段代码有几个问题,但您会收到此错误,因为您试图将值分配给突出显示的行中的数组;这就是为什么它抱怨分配给数组类型的原因char[7]。这没有多大意义,因为您无法更改数组的位置。您可以通过调用来交换字节memcpy,或者,也许更惯用的方式,更改struct personCatalog这样的定义,即zipcodetruechar *而不是 char 数组。

于 2012-11-25T03:31:12.007 回答
1

C 语言本身并不知道如何将 7 个字符分配给其他 7 个字符。它只允许您一次将一种原始类型分配给另一种:

zipCode[0] = temp[0]
zipCode[1] = temp[1];
// etc.

要在 C 中复制连续的数组,例如zipCode,您可以使用memcpy

memcpy(zipCode, temp, 7);

此外,我可能在我的小屏幕上误读了您的意图,但您也不应该将结构指针分配给 zipCode。

于 2012-11-25T03:25:00.410 回答
0

该数组由指针组成。所以你用来交换它们的临时对象也应该是一个指针。

    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()”

于 2012-11-25T21:53:14.837 回答