2014-03-03 129 views
1

我有一個堆棧,它將容納一個BIGINT。 bigint是一個具有char數組的結構,它將保存我們的數字和其他一些值。所以我做了我的堆棧,並且從STDIN一切正常,但是當我嘗試添加一個bigint時,似乎沒有任何東西被添加。這裏是我的push_stack()代碼:添加指向堆棧的指針C

void push_stack (stack *this, stack_item item) { 
    if (full_stack (this)){realloc_stack (this);} 
    this->data[this->size] = strdup(item); 
    this->size++; 
} 

這裏是我的stack結構:

struct stack { 
    size_t capacity; 
    size_t size; 
    stack_item *data; 
}; 

這裏是我的bigint結構:

struct bigint { 
    size_t capacity; 
    size_t size; 
    bool negative; 
    char *digits; 
}; 

bigint *new_string_bigint (char *string) { 
    assert (string != NULL); 
    size_t length = strlen (string); 
    bigint *this = new_bigint (length > MIN_CAPACITY ? length : MIN_CAPACITY); 
    char *strdigit = &string[length - 1]; 
    if (*string == '_') { 
     this->negative = true; 
     ++string; 
    } 
    char *thisdigit = this->digits; 
    while (strdigit >= string) { 
     assert (isdigit (*strdigit)); 
     *thisdigit++ = *strdigit-- - '0'; 
    } 
    this->size = thisdigit - this->digits; 
    trim_zeros (this); 
    return this; 
} 

現在我additon堆棧:

void do_push (stack *stack, char *numstr) { 
    bigint *bigint = new_string_bigint (numstr); 
    show_bigint(bigint); 
    push_stack(stack, bigint); 
} 

出於某種原因,我的bigint不會添加到堆棧。任何幫助表示讚賞。

+0

是因爲我在使用strdup嗎? – user1924782

+0

你沒有包含棧定義 –

+1

什麼是'stack_item'?除非它是一個以'char *'結尾的字符串,否則你不能'strdup()'它。 – John3136

回答

1

您致電push_stack()將指針傳遞給bigint

push_stack()期待stack_item(不是指向bigint的指針)。

然後你strdup()該項目(這是不是一個char*到一個0終止字符串正如預期的strdup)。

當您構建它時,您應該收到編譯器警告。嘗試修復那些第一!

+0

stack_item是一個通用數據類型你是 – user1924782

+0

C中的通用數據類型?你是如何定義它的? '無效*'? – John3136

+0

stack_item * data; – user1924782