字符串输入问题
本帖最后由 wzgame001 于 2020-4-21 22:16 编辑#include<stdio.h>
#include<stdlib.h>
int main()
{
char * a;
int i;
for(i=0; i < 3; i++)
{
a = (char *)malloc(4);
gets(a);
}
puts(a);
}
开辟了4个字节的空间,不应该是3个字符和一个‘\0’吗?????
为什么可以输入7个字符??? 本帖最后由 4goodworld 于 2020-4-21 21:50 编辑
因为这个gets函数可以无限读取,易发生溢出。
至于你现在的程序为啥没有报错,是因为你申请的内存空间暂时并没有并“占用”,就好像你去一块大田里面 圈一平米,如果大田里没有用,你就算越点界,其实也没啥大影响,但是,如果有天来人也要在你周边使用的时候,你的一些数据会被覆盖
如果你按照我这个下面的方法,可能就立马报错了
4goodworld 发表于 2020-4-21 21:49
因为这个gets函数可以无限读取,易发生溢出。
至于你现在的程序为啥没有报错,是因为你申请的内存空间暂时 ...
按你的解释我好像理解了,我把我的代码按照你的修改了一下,如下 (等级不够不能发图):
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i;
for(i=0; i < 3; i++)
{
char b;
char *p;
p = gets(b);
puts(p);
}
return 0;
}
运行的结果如下:
123
123
1234
1234酤`
12345
1234酤`
然后我又修改了一下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i;
for(i=0; i < 3; i++)
{
char b;
char *p = b;
gets(b);
puts(p);
}
return 0;
}
运行的结果如下:
123
123
1234
12345
当输入12345,直接停止工作,然后我就陷入了思考,这两个程序功能不是一样的吗???为什么结果不一样???? wzgame001 发表于 2020-4-21 22:55
按你的解释我好像理解了,我把我的代码按照你的修改了一下,如下 (等级不够不能发图):
#include
#in ...
能一样吗?你自己好好想想
char *p = b;和 char *p;能一样吗?
页:
[1]