gets的指针用法,通过分配空间来输入字符,哪里错了?
```c
#include
int main()
{
char* p = (char*)malloc(20 * sizeof(char));
gets(p);
puts(p);
return 0;
}
```
使用 gets 函数在 C 语言中是不安全的,因为它不会对输入的字符串进行边界检查,容易造成缓冲区溢出攻击。
要安全地读取字符串,可以使用 fgets 函数,它可以指定读取的字符数量,以避免缓冲区溢出。
#include<stdio.h>
int main()
{
char p[20];
fgets(p, 20, stdin);
puts(p);
return 0;
}
回答若有帮助,请你采纳哈!
您的代码存在严重的安全漏洞,因为 gets 函数不会检查输入的字符数是否超出缓冲区的大小。当输入的字符数超出缓冲区大小时,将导致缓冲区溢出,从而造成安全问题。
为了避免这种问题,应该使用 fgets 函数代替 gets 函数。 fgets 函数可以通过指定缓冲区的大小来限制输入的字符数,从而避免缓冲区溢出的情况。
代码示例:
#include<stdio.h>
int main()
{
char* p = (char*)malloc(20 * sizeof(char));
fgets(p, 20, stdin);
puts(p);
return 0;
}
供参考:
#include <stdio.h>
#include <stdlib.h> //修改 malloc()函数需包含这个头文件
int main()
{
char* p = (char*)malloc(128 * sizeof(char));//修改 20 空间小了
gets_s(p,128); //gets(p); VS编译器里,用gets_s()函数替代gets()函数
puts(p);
return 0;
}