DSP

一个栈数据越界的小例子

2019-07-13 17:16发布

前段时间,有个学妹跑过来找我,学长,我的程序出了bug,找不出来,你帮我看看吧。去了之后看到她的代码是这样写的(我只写出主要出问题的代码): struct stu{ char name[10]; char passwd[10]; };//定义了一个结构体,成员变量为两个char数组; //她在某个函数方法内是这样写的 int i; struct stu st; for(i=0;i<10;i++) st.name[i]=getc(); for(i=0;i<10;i++) st.passwd[i]=getc(); //然后把结构体的内容写入某个文件中; fprintf(fd,"%s ",st.name); fprintf(fd,"%s ",st.passwd); 这个学妹比较实在,她每次输入的名字都是10个字节,密码也是,于是乎就有了下面的问题;
她在后面的程序中把数据存文件中读出来,然后输入当时写的数据进行验证,结果是错的,验证总是失败的,百思不得姐,然后来找我了。
我在大概扫了代码后第一眼觉得好像没什么错啊,但是验证总是失败。很无奈,但是作为学长总不能说不会吧,多丢人。于是我再次仔细的审查了一下代码,终于发现了一点问题 for(i=0;i<10;i++) st.name[i]=getc(); for(i=0;i<10;i++) st.passwd[i]=getc(); 上述代码扫一眼看似没什么问题,但是 问题就是出在这的,还有就是她每次都会输入10个字符;这段代码的问题在于在每次输入后没有给数组结尾加‘