
正文
c语言中gets函数不能用,c语言中gets函数用法
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
字符串指针初始化后,为何仍不能使用gets()函数?
1、因为ch指向的字符串是存放在不可以更改的内存区域,更改ch指向单元的任何数据都是不允许的。所以你gets(ch)是重写ch所指单元,故出现错误。数组是可以的,因为它不是存放在不可以更改的内存区域。
2、执行了,它把执行scanf(%d,&n);时遗留在缓冲区中的回车符收走了;gets函数以回车符为结束命令,所以它以为你已经输入完毕了。解决办法很多,但正宗的是在gets前面加一句fflush(stdin);把缓冲区清空。
3、C语言的gets函数一般包含在stdio.h头文件里,如果没有包含比头文件那可能会有问题。第二种情况包含了还出问题,说明你的编译器已经不支持这个函数了,这个函数非常不安全,容易造成溢出,建议换成fgets函数。
4、gets是一个标准库函数,在C语言中常常被用来从标准输入(通常是键盘)读取一整行文本。然而,gets函数因为其安全问题,已经在C11标准中被弃用,并建议使用更安全的fgets函数替代。
相关问答
Q1: C语言gets为什么不执行
因为你输入一个数字,按下enter键。那么%d读取数字,gets读取按下的enter键,即换行。可以在gets前面加一句getchar();来读取换行。
所以你gets得到的就只是一个空行了。getchar()的作用是读一个字符,用了它之后,就刚好吃掉了那个换行符,所以gets得以顺利运行。你可以用一个while循环,反复gets,直到读出的不是空字串。
C语言的gets函数一般包含在stdio.h头文件里,如果没有包含比头文件那可能会有问题。第二种情况包含了还出问题,说明你的编译器已经不支持这个函数了,这个函数非常不安全,容易造成溢出,建议换成fgets函数。
gets函数是在等待你输入字符串啊,当然会停止啦。输入字符串,用回车结束后方可以继续运行。当然按照这个代码,字符串不能超过20个字节(包括结束符)。
C语言里的gets()函数功能是从输入缓存中读取多个字符,遇到回车符时,结束输入。当使用gets()函数之前有过数据输入,并且,操作者输入了回车确认,这个回车符没有被清理,被保存在输入缓存中时,gets()会读到这个字符,结束读字符操作。因此,从用户表面上看,gets()没有起作用,跳过了。
编译问题。这个是一个警告。我记得以前有看过,是说,gets没有限制输入字符的长度,你的数组a是100字节,如果输入101字节会溢出。只是建议你少用,用别的替代。
Q2: 为什么在c语言中使用gets函数是危险的
1、这里原因是gets函数不安全,visual studio的后续产品已经不再支持此类函数,可以换成fgets(str1, sizeof(str1), stdin);第一个参数是,字符存储地址,第二个是最大内存大小,第三个是从哪里读取,stdin是从键盘,也可以是文件指针表示从文件中读取。
2、gets(a);当你输入的东西远比12要长时,他还是会接收并写入空间。这样就溢出了,覆盖掉后面的相应空间。也就是说他写入了不该他来写的东西。如果写得设计好点,完全可以通过这个去完成一些不好的事情。编译器一般会提示你去换个安全的函数,来避免这个情况。
3、gets确实是不安全的,因为无法知道该函数返回的数据有多长。
4、gets是一个标准库函数,在C语言中常常被用来从标准输入(通常是键盘)读取一整行文本。然而,gets函数因为其安全问题,已经在C11标准中被弃用,并建议使用更安全的fgets函数替代。
Q3: c语言编程中字符串复制函数编程程序出现错误,这是怎么回事?
多线程程序使用了线程不安全的函数。3 多线程读写的数据未加锁保护。对于会被多个线程同时访问的全局数据,应该注意加锁保护,否则很容易造成core dump 4 非法指针 a) 使用空指针 b) 随意使用指针转换。
一般是你在调用函数的时候传递的是int类型的数据,但那个函数定义的参数类型不是int(比如是结构或者指针或者数组)。
若有语句:char s1[ ]= 〞string 〞, s2[8],﹡s3,﹡s4= 〞string2 〞;则对库函数strcpy的错误调用是strcpy(s3, 〞string1 〞);strcpy不管是否会溢出,保证不发生溢出是程序员做的,所以A正确。s3未初始化,没有指向任何一片空间,C错误,B、D正常操作。
A,B,D都可以将字符串的结束符0复制,C中当*b为NULL时,for循环已经结束,里面的这条if(!(*a=*b)) break;根本就不会执行。
Q4: [C语言]求大神,为什么我的gets()一输入就报错弹出。。
gets从标准输入设备读字符串函数。可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。本函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。
我试了下,第一次使用gets()的时候就会出错。具体出不出错,要看是不是你侵犯了哪一块内存空间。和使用几次似乎没有直接关系。如果你不停的运行那个程序,我个人认为是不会导致系统内存分配殆尽的,你可以试试,最多就是重启次机器么。
这是由于程序在读取数字时只读取了前面的数字部分,而把后面的回车符留在了键盘缓冲区,所以在下面读取字符串时遇到这个回车符就结束了,也就是说程序读到了一个空的字符串。另外,在下面复制字符串的时候并没有复制字符串的结束符。下面的代码改正了这些问题。
用 fgets( book[i].bn, 100, stdin);这种形式输入。回车换行符就会含在字符串里,输入不会读乱。读入的字符串长度等于 strlen(book[i].bn);最后一个字符是 \n把它赋成 \0 就从字符串里清除了。
Q5: 程序里面为什么第一个gets函数不能执行,直接跳过了~~(C语言)
1、C语言里的gets()函数功能是从输入缓存中读取多个字符,遇到回车符时,结束输入。当使用gets()函数之前有过数据输入,并且,操作者输入了回车确认,这个回车符没有被清理,被保存在输入缓存中时,gets()会读到这个字符,结束读字符操作。因此,从用户表面上看,gets()没有起作用,跳过了。
2、执行了,它把执行scanf(%d,&n);时遗留在缓冲区中的回车符收走了;gets函数以回车符为结束命令,所以它以为你已经输入完毕了。解决办法很多,但正宗的是在gets前面加一句fflush(stdin);把缓冲区清空。
3、首先解答一下这个C语言代码出错的原因:第一个gets未定义:出现这个错误一般是没有包含相应的头文件,或者库里没有这个函数。这里应该是没有这个函数。gets(char *dest)是一个老的库函数,采用这个函数存在越界的安全隐患。
4、从贴出来的代码看起来没什么问题。估计是在调用Creat函数之前输入缓冲区没有清空。
5、scanf函数输入后会多一个回车,这个回车就进入了gets里面,所以scanf后应该跟个getc来接收回车,以免影响后面的输入。
c语言中gets函数不能用的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言中gets函数用法、c语言中gets函数不能用的信息别忘了在本站进行查找喔。






