添加指向堆栈的指针C.

时间:2014-03-03 22:55:02

标签: c pointers stack

我有一个可以容纳BIGINT的堆栈。 bigint是一个具有char数组的结构,该数组将保存我们的数字和其他一些值。所以我创建了我的堆栈,并且STDIN的所有功能都运行良好,但是当我尝试添加一个bigint时,似乎没有添加任何内容。这是我的push_stack()代码:

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

现在我加入了堆栈:

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

出于某种原因,我的bigint不会添加到堆栈中。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您致电push_stack()将指针传递给bigint

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

然后strdup()项目(不是char*到0终止的字符串,如strdup所预期的那样。)

构建它时,您应该收到编译器警告。先尝试修复它们!