鱼C论坛

 找回密码
 立即注册
查看: 2411|回复: 4

栈不能显示了

[复制链接]
发表于 2016-5-15 16:20:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>

#define MAXSIDE 20
typedef struct {
        char stack[MAXSIDE];
        int top;
}Sqstack,*Psqstack;

void Inin_stack(Psqstack n_stack)
{
        n_stack=(Psqstack)malloc(sizeof(Sqstack));
        n_stack->top=-1;
}

int pop_stack(Psqstack n_stack,char e)
{
        if(-1==n_stack->top)
                return 0;
        e=n_stack->stack[n_stack->top];
        n_stack->top--;
        return 1;         
}

void display_stack(Psqstack n_stack)
{
        int i;
        //for(i=0;i<=n_stack->top;i++)
        for(i=n_stack->top;i>=0;i--)
                printf("%c",n_stack->stack[i]);
        printf("\n");
}

int main(void)
{
        Sqstack n_stack;
        char stack[MAXSIDE]="i want to love you!";       
        char e;
        int i;
        Inin_stack(&n_stack);
        for(i=0;stack[i]!='\0';i++)
        {
                push_stack(&n_stack,stack[i]);
        }
        display_stack(&n_stack);
}

大哥们,我这个栈为什么不能显示啊?编译没问题啊!!!!5555555555555555555555555555
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-16 15:20:06 | 显示全部楼层

卤煮,你的栈初始化··· 挺难理解啊 (这个后边再说)

1. 你缺少push,所以我没法调试···
void push_stack(Psqstack n_stack, char e)
{
        n_stack->top++;
        n_stack->stack[n_stack->top] = e;
}

2. 你的栈的初始化
如果你使用数组,那就不用malloc了,因为都在栈空间里,所以你申请的堆是浪费的;
并且,你的malloc临时修改了参数n_stack的地址,然后你的-1的赋值也就无效了,
因为那个你辛辛苦苦追到手的地址,已经在离开函数时被你抛弃。

如果不是很清楚,就自己单步调试一下,调试基本方法:http://bbs.fishc.com/thread-71753-1-1.html   (PS:我为自己带包盐!就是这么无耻!)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-16 15:44:02 | 显示全部楼层
n0noper 发表于 2016-5-16 15:20
卤煮,你的栈初始化··· 挺难理解啊 (这个后边再说)

1. 你缺少push,所以我没法调试···

我不会调试额。。。现在修改好了 初始化我改成 这样不知道好不好
Psqstack Inin_stack(Psqstack n_stack)
{
        n_stack=(Psqstack)malloc(sizeof(Sqstack));
        n_stack->top=-1;
        return n_stack;
}
int main(void)
{
        Psqstack n_stack;
        n_stack=Inin_stack(n_stack);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-16 15:47:40 | 显示全部楼层
n0noper 发表于 2016-5-16 15:20
卤煮,你的栈初始化··· 挺难理解啊 (这个后边再说)

1. 你缺少push,所以我没法调试···

,你的malloc临时修改了参数n_stack的地址  这个我理解了,但是为什么我的-1怎么会不见了,不是相当于改变原来的地址,浪费了原来的地址,顺便把-1弄进去新的地址了吗,怎么会不见?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-16 15:47:56 | 显示全部楼层
fanzhihao 发表于 2016-5-16 15:44
我不会调试额。。。现在修改好了 初始化我改成 这样不知道好不好
Psqstack Inin_stack(Psqstack ...


我的天···
亲爱的,表闹。你这个栈都是静态的元素,你定义的时候已经分配空间了,所以不用malloc了···

所以Inin_stack函数中,只需要将stack清空(建议),top设为-1即可。不需要malloc
想想char arr[20]; 这个时候还需要arr = malloc(xxx)吗? 栈里边有了家庭了,不用再去相亲区间申请了!

PS:不会调试看我的帖子啊,这广告打得,我也是佩服我自己
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-24 20:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表