首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CC++ gets、fgets、gets_s函数使用引起的思考

参考链接: C++ gets() 2019独角兽企业重金招聘Python工程师标准>>>          最近做游戏编辑器,自己试着用C/C++写了一个读取简单配置表的函数,在控制台下测试的时候,使用了...C的标准库gets函数,发现编译器报告gets函数unsafe,网上搜索了一下,发现gets函数不对接受字符串的buffer进行边界检测,会造成越界,从而产生bug;自己写的东西,也是自己用的东西,当然可以在定义配置表的时候得到控制...函数获取的不一样,fgets函数获取的字符串会在buffer里面保留换行符,而gets函数不会;好吧,问题找到了,解决也很简单,把最后一个换行符拿掉,换成'\0'就可以了。...然后,又发现有个gets_s函数,可以像gets一样不会获取换行符,也不会有gets的越界问题,然后在cppreference.com查看了这几个函数的描述,却发现gets_s函数是一个标准库扩展函数,...一个可选项;所以就不知道这个gets_s函数在各个编译器下的支持情况如何!

83900
您找到你想要的搜索结果了吗?
是的
没有找到

字符数组输入输出---fputs,gets_s,puts,fputs

解决上面问题需要用到: fgetsh或gets_s #define _CRT_SECURE_NO_WARNINGS #include #include #include... void test() { //初始化方式2 char arr[8] ; //gets函数因为不检测越界情况,一旦越界,就会报错 //所以改用gets_s //即便写了大小...,一旦输入超出,也不会检测,还是会溢出,报错 gets_s(arr, 20); //或者可以用fgets,不光能向文件输入,也能像终端窗口输入 //当往里面输入数据超出数组大小时,会自动删减,不会产生溢出...不同点: gets函数:只把换行符作为结束分隔符,即gets函数可以接收空格(’ ‘)和制表符(’\t’)....,并将其留在缓冲区里 如:输入\ndddd\n char sh; sh=(char)malloc(sizeof(char)); //scanf("%s",sh); gets(sh); printf

64510

linux系统下,警告:warning: implicit declaration of function ‘gets’ 和 war

字符数组 的英文名字是 char [] gets()函数的基本用法为: char *gets(char *s); 该函数的参数是一个字符数组,该函数的返回值也是一个字符数组。...linux下的代码如下: 1 #include 2 3 int main() 4 { 5    char a[100] = { 0 }; 6   ...gets(a); 7    printf("%s\n", a); 8    return 0; 9 } -------------------------------------...fgets()函数的基本用法为: fgets(char *s, int size, FILE *stream); 第一个参数是:字符类型的数组,第二个参数是:标明这个数组的大小,第三个参数是:如果总是通过键盘输入的话...main ( ) {   char name[20] = { 0 };   fgets(name, sizeof(name), stdin); //stdin 意思是键盘输入   printf("%s"

2.9K10

c-gets()方法

; printf("%s\n", buff); return 0; } A:这个不显眼的问题就是使用了gets()方法,其函数原型如下: char* gets(char *s); 此方法接受一个字符数组参数...gets()函数是不安全的,不推荐使用,一般情况下编译器也会给出警告提示:the `gets’ function is dangerous and should not be used。...gets()不检查预留存储区是否能够容纳实际输入的数据。多出来的字符简单的溢出到相邻的存储区,可能会导致错误。...所以,这里我们一般用fgets()方法更好,函数原型如下: char* fgets(char *s, int n, FILE *stream); 一般使用fgets()函数,都是读取文件当中的n-1个字符到...s中,其实,此函数还有一个很好的用处就是从标准输入流中读取字符串,而且不用担心输入的字符个数超出了字符数组的大小而导致溢出的问题!

37630

gets 、getchar 、fgets 、scanf的用法

5.fgets用法 原型:fgets(buf,sizeof(s),stdin) 功能:从目标文件流 file 中读取 n-1 个字符,放入以 buf 起始地址的内存空间中。...如下面的示例代码所示: int main(void) { char buffer[11]; gets(buffer); printf("输出: %s\n",buffer); return 0; } 示例代码的运行结果为...如果是从键盘上读入数据,可以使用 stdin 作为该参数,如下面的代码所示: int main(void) { char buffer[11]; fgets(buffer,11,stdin); printf("输出: %s\...aaaaaaaaaa   除此之外,C99 还提供了 fgets 函数的宽字符版本 fgetws 函数,其函数的一般原型如下面的代码所示:   wchar_t *fgetws(wchar_t * restrict s,...stdin是标准输入(也就是键盘输入),C标准库里面的一个全局变量stdin也是FILE*类型的,因此在使用FILE*类型作为参数的地方,可以使用stdin*/ printf("%s\n%s\n",str1

2.8K60

c语言中gets()的详细用法

今天说一说c语言中gets()的详细用法,希望能够帮助大家进步!!! gets从标准输入设备读字符串函数。...( "%s\n" , str1); } gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符...其调用格式为: gets(s); 其中s为字符串变量(字符串数组名或字符串指针)。...gets(s)函数与scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但...gets(s) 函数中的变量s为一字符串指针。如果为单个字符指针,编译连接不会有错误,但运行后内存溢出错误。

1.4K20
领券