鱼C论坛

 找回密码
 立即注册
查看: 322|回复: 3

[已解决]字符串输入问题

[复制链接]
发表于 2020-4-21 20:15:04 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 wzgame001 于 2020-4-21 22:16 编辑

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

int main()
{
    char * a[3];
    int i;
    for(i=0; i < 3; i++)
    {
        a[i] = (char *)malloc(4);
        gets(a[i]);
    }
    puts(a[0]);
}

开辟了4个字节的空间,不应该是3个字符和一个‘\0’吗?????
为什么可以输入7个字符???
最佳答案
2020-4-21 21:49:33
本帖最后由 4goodworld 于 2020-4-21 21:50 编辑

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

使用道具 举报

发表于 2020-4-21 21:49:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 4goodworld 于 2020-4-21 21:50 编辑

因为这个gets函数可以无限读取,易发生溢出。
至于你现在的程序为啥没有报错,是因为你申请的内存空间暂时并没有并“占用”,就好像你去一块大田里面 圈一平米,如果大田里没有用,你就算越点界,其实也没啥大影响,但是,如果有天来人也要在你周边使用的时候,你的一些数据会被覆盖
如果你按照我这个下面的方法,可能就立马报错了
QQ截图20200421214809.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[4];
        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[4];
        char *p = b;
        gets(b);
        puts(p);
    }
    return 0;
}
运行的结果如下:
123
123
1234

12345

当输入12345,直接停止工作,然后我就陷入了思考,这两个程序功能不是一样的吗???为什么结果不一样????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

能一样吗?你自己好好想想
char *p = b;和 char *p;能一样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-14 18:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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