【问题标题】:Structures used to store postal codes用于存储邮政编码的结构
【发布时间】:2015-11-26 01:51:38
【问题描述】:

它要求我创建一个哈希函数,通过对邮政编码的字符求和来将其转换为整数。这是我的代码。我还没有接触到哈希函数。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h>
typedef struct PostalCode
{ 
    int size;
    char *array[6];
} PostalCode;

int main()
{ 
int size = 6, i;
PostalCode *h = malloc(sizeof(PostalCode));
h->size = size; 
h->array = malloc(sizeof(char)*size);

printf("Please enter your postal code: \n"); 

for (i=0; i<6; i++) 
    scanf(" %c", &(h->array[i]));
}

我现在得到的错误是:postalcode.c:9:11: error: assignment to expression with array type h->array = malloc(sizeof(char)*size);

【问题讨论】:

  • 您正在声明一个数据类型为Postalcode的变量名
  • char *array[6]; --> char array[6]; scanf(" %c", &amp;(h-&gt;array[i])); TTFN
  • 我仍然得到完全相同的错误,我知道我需要 %c 和 & 虽然
  • 这些错误消息看起来像是您正在尝试将源文件作为 shell 脚本执行。
  • 顺便说一句,无论是什么要求您创建一个哈希函数,通过汇总邮政编码字符来询问它是什么意思。例如,如果邮政编码是 265541,那么和是 2 + 6 + 5 + 5 + 4 + 1 = 23,还是数字的 ASCII 码之和? :)

标签: c struct


【解决方案1】:

线

  char *array[6]

声明一个包含 6 个指向 char 的指针的数组,这不是你想要的。你可以做到的

char * array

并以这种方式解决错误,或遵循 chux 的建议,即有

char array[6]

在这种情况下,您不需要导致错误的行,只需将其删除即可。无需动态分配数组。

其他一些建议:

如果您的邮政编码始终是 6 个字符,那么您实际上并没有 需要 PostalCode 结构,除非您打算保留其他一些 那里的邮政编码信息。你可以这样做

typedef char PostalCode[6];

当然,如果您希望邮政编码有 可变长度,那么大小可能会有所帮助。

无论你想要一个 struct 还是 typedef 一个 char 数组,硬编码值 6 都是一个坏主意。如果总是6个字符,那么你可以#define它;或者如果你在结构中保持大小,那么确保你初始化它并使用结构成员而不是文字数字 6。

这里不需要动态分配内存,但如果你这样做,请确保你释放它。

祝你好运!

【讨论】:

  • 首先感谢您提供 char *array;建议。然而,在我修复之后,出现了新错误:“ ./postalcode.c ./postalcode.c: line 2: $'\r': command not found ./postalcode.c: line 3: syntax error near unexpected token (''/postalcode.c: line 3: void main()" 另外,我使用结构的唯一原因是我的教授要求我们这样做是为了练习,否则我完全理解这是不必要的
  • 我认为您现在遇到了错误,因为您尝试将 postalcode.c 作为 shell 脚本运行。您需要编译源代码,然后执行生成的二进制文件。
最近更新 更多