wzgame001 发表于 2020-4-21 20:15:04

字符串输入问题

本帖最后由 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:49:33

本帖最后由 4goodworld 于 2020-4-21 21:50 编辑

因为这个gets函数可以无限读取,易发生溢出。
至于你现在的程序为啥没有报错,是因为你申请的内存空间暂时并没有并“占用”,就好像你去一块大田里面 圈一平米,如果大田里没有用,你就算越点界,其实也没啥大影响,但是,如果有天来人也要在你周边使用的时候,你的一些数据会被覆盖
如果你按照我这个下面的方法,可能就立马报错了

wzgame001 发表于 2020-4-21 22:55:20

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,直接停止工作,然后我就陷入了思考,这两个程序功能不是一样的吗???为什么结果不一样????

4goodworld 发表于 2020-4-21 23:12:27

wzgame001 发表于 2020-4-21 22:55
按你的解释我好像理解了,我把我的代码按照你的修改了一下,如下 (等级不够不能发图):
#include
#in ...

能一样吗?你自己好好想想
char *p = b;和 char *p;能一样吗?
页: [1]
查看完整版本: 字符串输入问题