0

我在 C 中有一个结构,我使用一个函数从用户那里获取结构的值。下面是我的结构。

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);
}
4

4 回答 4

4
printf("Element Name: ");
scanf("%s", element.name);

您必须为所指向的对象分配内存,element.name例如使用malloc. 没有正确分配element.name是一个无效的指针。

于 2012-11-18T17:36:42.230 回答
2

您没有分配足够的内存来尝试读入您的字符串。

顺便说一句,你的最后一个scanf很奇怪:你真的要问地址吗?这可能很危险。

于 2012-11-18T17:36:58.957 回答
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;
于 2012-11-18T17:43:14.113 回答
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。我确信它会正确编译。

于 2012-11-18T17:43:09.087 回答