我在C中有一个stuct,我使用一个函数从用户那里获取结构的值。以下是我的结构。
typedef struct {
char *name;
char *chemical_symbol;
char *class;
int atomic_number;
double atomic_weight;
int *electrons;
} element_t;
这是我用来从用户那里获取值的函数。在询问化学符号后,问题在于此功能。我得到总线错误:10。我对总线错误的理解是当处理器无法尝试访问内存时。任何帮助表示赞赏。谢谢!
element_t scan_element() {
element_t element;
printf ("Enter New Element Information:\n\n");
printf("Element Name: ");
scanf("%s", element.name);
printf("Element Chemical Symbol: ");
scanf("%s", element.chemical_symbol);
printf("Element Class: ");
scanf("%s", element.class);
printf("Element Atomic Number: ");
scanf("%d", &element.atomic_number);
printf("Element Atomic Weight: ");
scanf("%lf", &element.atmoic_weight);
printf("Element Electrons: ");
scanf("%p", &element.electrons);
return(element);
}
答案 0 :(得分:4)
printf("Element Name: ");
scanf("%s", element.name);
您必须为element.name
指向的对象分配内存,例如使用malloc
。没有适当的分配element.name
是一个无效的指针。
答案 1 :(得分:2)
您没有分配足够的内存来尝试读取字符串。
顺便说一下,你的上一个scanf
很奇怪:你真的想问一个地址吗?这可能很危险。
答案 2 :(得分:2)
你需要分配内存。也许最好的(当然最简单的!)方式只是定义你的结构有字符数组(而不是字符指针)。
实施例
#define MAX_STRING 80
#define MAX_ELECTRONS 32
typedef struct {
char name[MAX_STRING];
char chemical_symbol[MAX_STRING];
char class[MAX_STRING];
int atomic_number;
double atmoic_weight;
int electrons[MAX_ELECTRONS];
} element_t;
答案 3 :(得分:0)
在扫描字符串之前,应为它们分配一些空间。例如:
void initialize( element_t * p ) {
p->name = malloc( sizeof( char ) * MAXSIZE );
p->chemical_symbol = malloc( sizeof( char ) * MAXSIZE );
p->class = malloc( sizeof( char ) * MAXSIZE );
}
致电scan_element
之前,请致电initialize
。我相信它会正确编译。