2016-11-21 97 views
-1

我有一個C程序,實現arraylist(動態數組,但我不明白如何或爲什麼我不能打印數組大小。當我嘗試這樣做,程序只是crash.Heres程序。打印arraylist大小崩潰

arraylist.c

#include "arraylist.h" 

void arraylist_initial(struct arraylist *list) { 
    list->size = 0; 
    list->data = NULL; 
} 

int arraylist_get_size(const struct arraylist list) { 
    return list.size; 
} 

value_type* arraylist_get_data_collection(const struct arraylist list) { 
    return list.data; 
} 

void arraylist_set_data_collection(struct arraylist *list, value_type* data) { 
    list->data = data; 
} 

void arraylist_add(struct arraylist *list, value_type value) { 
    int size = arraylist_get_size(*list); 
    value_type *new_data; 

    new_data = realloc(list->data, (size + 1) * sizeof new_data[0]); 

    if (new_data) 
    { 
     new_data[size] = value; 
     arraylist_set_data_collection(list, new_data); 
     ++list->size; 
    } 
} 

value_type arraylist_get(const struct arraylist list, int index) { 
    if(index < arraylist_get_size(list)) { 
    return list.data[index]; 
    } 
    else { 
    return NULL; 
    } 
} 

int arraylist_indexof(const struct arraylist list, value_type value) { 
    int index = 0; 
    for(; index != arraylist_get_size(list); ++index) { 
    if(strcmp(list.data[index], value) == 0) { 
     return index; 
    } 
    } 

    return -1; 
} 

int main(void){ 
    struct arraylist list; 

    arraylist_initial(&list); 

    arraylist_add(&list, "1"); 
    arraylist_add(&list, "2"); 
    arraylist_add(&list, "3"); 
    arraylist_add(&list, "4"); 
    arraylist_add(&list, "5"); 
    arraylist_add(&list, "6"); 
    arraylist_add(&list, "7"); 
    arraylist_get_size(list); 


    int index = 0; 
    for(; index != 8; ++index) { 
    printf("CHECK: %s\n", arraylist_get(list, index)); 

    } 

    return 0; 
} 

arraylist.h

#define _ARRAYLIST_H 

#include <stdio.h> 

typedef char* value_type; 

struct arraylist { 
    int size; 
    value_type* data; 
}; 

extern void arraylist_initial(struct arraylist *list); 
extern int arraylist_get_size(const struct arraylist list); 
extern value_type* arraylist_get_data_collection(const struct arraylist list); 
extern void arraylist_set_data_collection(struct arraylist *list, value_type* data); 
extern void arraylist_add(struct arraylist *list, value_type value); 
extern value_type arraylist_get(const struct arraylist list, int index); 
extern int arraylist_indexof(const struct arraylist list, value_type value); 

在,如果我做arraylist.c

printf(arraylist_get_size_list(list)); 

它只是崩潰,我沒有得到它?

謝謝

回答

0

對不起,我在回憶的時候,你不能錯過與C結構看起來你現在可以。他們不斷變化的事情。

下面是真正的問題:printf需要一個字符串作爲第一個參數。

相反的:

printf(arraylist_get_size_list(list)); 

嘗試:

printf("size: %d\n", arraylist_get_size_list(list)); 
+0

感謝您的answer.However,如果我嘗試你說什麼,我得到的錯誤:不兼容類型的 「arraylist_get_size」 的說法1和arraylist_get_size –

+0

的衝突類型請參閱我的更新。結構的通過沒問題。我認爲你的錯誤在於你傳遞給printf的東西。 –

+0

謝謝你。它的工作原理,但實際的代碼,它說的大小是7.但是,不應該是6?因爲它從索引0開始,我認爲它應該是0,1,2,3,4,5,6,爲什麼大小是7? –