我在函數query
中遇到錯誤。它沒有返回結果。 函數generate
初始化結果。它被功能query
調用。傳遞結構指針後無法獲取結構體
//定義結構
#define MAX 50
typedef struct {
char I[50];
char name[10];
} object;
typedef struct {
int num_items;
object items[MAX];
} arg_t;
//函數生成
void generate (object *q) {
// initialize
object objectArray[] = {
{
.I = "1",
.name = "John"
}, // item 1
{
.I = "2",
.name = "Jane"
}, // item 2
};
q = malloc(sizeof(arg_t));
q->num_items = 2;
printf("There are %d of elements in the record.\n", q->num_items);
memcpy(q->items, object, sizeof(object) * q->num_items);
int i =0;
for (i=0; i < q->num_items ;i++) {
printf("option: %s \n", q->items[i].I);
printf("option: %s \n", q->items[i].name);
}
printf("Leaving Generate()\n");
}
//功能查詢
void query() {
arg_t qHolder;
arg_t *q = &qHolder; // give the pointer an address
q = malloc(sizeof(arg_t));
generate (q);
printf("There are %d of elements in the record.\n", qHolder.num_items); // <b> This line is wrong. It is giving 0 instead of 2. </b>
// There is no compiler error. It just does not print when it runs after the follwing line
int i =0;
for (i=0; i < q->num_items;i++) {
printf("option: %s \n", qHolder.items[i].I);
printf("option: %s \n", qHolder.items[i].name);
}
printf("Leaving Query()\n");
}
在主
()
query();
我猜你是問有關你得到了編譯器錯誤?將來,請始終提供完整的和未經編輯的錯誤日誌與問題,因爲這有助於我們回答實際問題而不是無關的事情。 –
沒有編譯器錯誤。它只是不打印,當它在行後面運行時: //以下將不起作用 – Babbit
您*應該*得到編譯器錯誤,因爲當函數需要一個指針時,首先調用'generate'指針指向'arg_t'到'對象'。那麼你應該在'generate'內部得到錯誤,因爲'q'是一個指向'object'的指針,並且沒有諸如'items'或'num_items'的成員。 –