用c语言写一个栈的进制转换所出现的问题

问题遇到的现象和发生背景 用c语言写一个栈的进制转换
用代码块功能插入代码,请勿粘贴截图
#include
#include
int const maxsize=1024;

typedef struct{
    int *top;  //头指针
    int *base;   //尾指针
    int stacksize;  //作为量度
}Stack;

Stack *initstack()//创建栈(初始化)
{
    Stack *stack;
    stack->base=(int*)malloc(sizeof(int)*maxsize);//数组
    stack->top=stack->base;
    stack->stacksize=maxsize;
    return stack;
    
}
int empty(Stack *s)//判断是否为空栈
{
    if(s->top==s->base)
    return 0;
    else
    return 1;
}
void push(Stack *s,int  x)//压栈
{
    if(s->top-s->base>s->stacksize)
{
    *(s->top)=x;
    s->top++;
}
    
}
void pop(Stack *s)//出栈
{    
        printf("%c",*(--s->top));
    

}

void change(int number,int cet)
{
    Stack *s=initstack();
    int k;
    char ch,t;
    if(number==0)
    {
      printf("转化后的%d进制数为:0\n",cet);
    }
    while(number)
    {
      k=number%cet;
    if(k>=10&&k'a'+cet-11;//找出对应字母最大的
        ch=t-(cet-k-1);//找出具体的字母
      }
      else
      {switch(k)
      {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:ch=k+48;break;
        case 10:
        case 11:
        case 12:
        case 13:
        case 14:
        case 15:ch=k+55;break;
        }
      }
      push(s,ch);
      number=number/cet;
     }
      

   
   printf("转换后的%d进制数为:",cet);
      while(empty(s))
      {
        pop (s);
      }
     printf("压栈问题");
     printf("\n");
}


int main(void)

{

        int number,cet;
        printf("请输入要转化的10进制数字,与需要转化的进制,中间用空格\n");
        system("pause");
        scanf("%d %d",&number,&cet);
        system("pause");
        change(number,cet);
        
}


运行结果及报错内容 结果不输出转换后的进制数
我的解答思路和尝试过的方法 之前用一个指针与直接定义数组正确做答
我想要达到的结果 能用这种方式正常输出

题主的代码问题在初始化函数里Stack* initstack(),Stack stack; 定义栈指针 stack 以后,没有动态生成栈空间,还有void push(Stack s, int x)压栈函数里做了修改,修改如下,见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
#include <crtdbg.h>
int const maxsize = 1024;
typedef struct {
    int* top;  //头指针
    int* base;   //尾指针
    int stacksize;  //作为量度
}Stack;

Stack* initstack()//创建栈(初始化)
{
    Stack* stack;

    stack = (Stack*)malloc(sizeof(Stack));   //修改

    stack->base = (int*)malloc(sizeof(int) * maxsize);//数组
    stack->top = stack->base;
    stack->stacksize = maxsize;
    return stack;
}
int empty(Stack* s)//判断是否为空栈
{
    if (s->top == s->base)
        return 0;
    else
        return 1;
}
void push(Stack* s, int  x)//压栈
{
    if (s->top - s->base > s->stacksize)//修改
    {
        return;  //修改
    }
    *(s->top) = x;
    s->top++;
}
void pop(Stack* s)//出栈
{
    printf("%c", *(--s->top));
}

void change(int number, int cet)
{
    Stack* s = initstack();
    int k;
    char ch, t;
    if (number == 0)
    {
        printf("转化后的%d进制数为:0\n", cet);
    }
    while (number)
    {
        k = number % cet;
        if (k >= 10 && k < cet)
        {
            t = 'a' + cet - 11;//找出对应字母最大的
            ch = t - (cet - k - 1);//找出具体的字母
        }
        else
        {
            switch (k)
            {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:ch = k + 48; break;
            case 10:
            case 11:
            case 12:
            case 13:
            case 14:
            case 15:ch = k + 55; break;
            }
        }
        push(s, ch);
        number = number / cet;
    }

    printf("转换后的%d进制数为:", cet);
    while (empty(s))
    {
        pop(s);
    }
    //printf("压栈问题"); //修改
    printf("\n");
}
int main(void)
{
    int number, cet;
    printf("请输入要转化的10进制数字,与需要转化的进制,中间用空格\n");
    system("pause");
    scanf("%d %d", &number, &cet);
    system("pause");
    change(number, cet);
    return 0;
}


#include <iostream>
#include <malloc.h>
using namespace std;

/**** 结 构 体 声 明 ****/
typedef struct scStack{
    struct scStack *next;
    int elem;
}scStack;

/**** 函 数 声 明 ****/
//进制转换函数,num为10进制数,system为转换目标进制,sys为栈空间
scStack *sysConvert(int num,int system,scStack *sys); 
scStack *push(scStack *stack,int elem);               //入栈
void pop(scStack *stack);                             //出栈

/*
    进制转换
*/
scStack *sysConvert(int num,int system,scStack *sys){
    while(num > 0){
        syS = push(syS,num % system);
        num /= system;
    }
    return syS;   //返回栈顶
}

/*
    余数入栈
*/
scStack *push(scStack *stack,int elem){
    scStack *newStack = (scStack *)malloc(sizeof(scStack));
    newStack->elem = elem;
    newStack->next = stack;
    stack = newStack;
    return stack;
}

/*
   余数出栈
*/
void pop(scStack *stack){
    while(stack){
        scStack *top = stack;
        top->elem >= 10 ? printf("%c",top->elem + 'a' - 10) : printf("%d",top->elem);
        stack = stack->next;
        free(top);
    }
    cout<<endl<<"转换完毕!"<<endl;
}

/*
    主函数
*/
int main(){
    scStack *stack = NULL; //初始化栈
    int num,system;
    cout<<"请输入一个10进制数:";
    cin>>num;
    cout<<"请输入想要转换为多少进制:";
    cin>>system;
    stack = sysConvert(num,system,stack);
    pop(stack);
    return 0;
}