申请动态内存时puts报错

问题遇到的现象和发生背景

为什么会这样,使用的是软件是 vs2022

问题相关代码,请勿粘贴截图

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
int i;
scanf("%d", &i);
char* p;
p = (char*)malloc(i);
char c;
scanf("%c", &c);//去除缓冲区内的\n 上面一个scanf输入的是 10\n 只会读取走10 留下\n
gets(p);
puts(p);
return 0;

}

运行结果及报错内容

0x00007FFC4F88F130 (ucrtbased.dll)处(位于 Project2.exe 中)引发的异常: 0xC0000005: 写入位置 0xFFFFFFFFDD29FB00 时发生访问冲突。

我的解答思路和尝试过的方法
我想要达到的结果

学习malloc

供参考:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i;
    scanf("%d", &i);
    char* p;
    p = (char*)malloc(sizeof(char) * i);
    char c;
    scanf("%c", &c);//去除缓冲区内的\n 上面一个scanf输入的是 10\n 只会读取走10 留下\n
    gets(p);
    puts(p);
    return 0;
}

多分配点啊

那你输入的i和p是什么啊


可以查看手册:c语言-puts() 中的内容