[英]C Structures Bus Error 10
我在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);
}
printf("Element Name: ");
scanf("%s", element.name);
您必須例如通過使用malloc
為element.name
指向的對象分配內存。 沒有適當的分配, element.name
是無效的指針。
您沒有分配足夠的內存來嘗試讀入您的字符串。
順便說一句,您的上一個scanf
很奇怪:您真的要問一個地址嗎? 可能很危險。
您需要分配內存。 最好的方法(肯定是最簡單的方法 !)也許就是簡單地將結構定義為具有字符數組(而不是字符指針)。
例:
#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;
在掃描字符串之前,應為它們分配一些空間。 例如:
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
。 我敢肯定它將正確編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.