为什么gets用不了
答:vs2019未定义标识符gets故障原因:在VS2015中,stdio.h头文件中已经不存在gets()函数定义,而被更安全的get_s()函数和fgets()函数所替代。故直接用gets()会出现未定义的错误。微软将 Visual J++ 改版为 Visual J#,但至 Visual Studio 2008 时取消支持 Visual J#;而 Visual Studio 2010 时,并入...
答:不是无效,而是你最后的scanf("%d",&ch_flag);输入时遗留在缓冲区中的'\n'被gets(str1);收到了。你在scanf("%d",&ch_flag);后加一句getchar();把遗留的那个'\n'吸收掉就可以了……
答:对的,gets读入的是字符串,如果输入整数结果也是字符串类型,如果你对整型变量gets,编译就会报错。
答:本函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值。这个事实导致gets函数只适用于玩具程序,为了避免这种情况,我们可以用fgets(stdin) (fgets实际...
答:由于gets不会限制输入的长度,这就可能导致安全问题。如果用户输入的字符串超过了预设的缓冲区大小(这通常很容易发生,因为用户输入的长度通常是不可预知的),那么就可能导致缓冲区溢出。这可能会进一步导致各种严重的安全问题,例如程序任意崩溃,甚至可能被恶意攻击者利用来进行更严重的攻击。尽管gets在某些...
答:可能你的编译器被病毒感染。我推荐你使用C-free编译器,支持C/C++
答:跟 fgets() 不同, gets() 不能被告知输入缓冲区的大小, 因此不能避免缓冲区的溢出。标准库的 fgets() 函数对 gets() 作了很大的改进, 尽管它仍然不完善。如果真的可能输入很长的行, 还是需要仔细思考, 正确处理。
答:你把前面的scanf("%d",&n);改成 scanf("%d\n",&n); 就不会了。这是因为,你在输入数字时,作为结束你会再输入一个回车,但是 scanf("%d",&n);不会把回车从缓冲里读走,这样,回车就会被你后面的gets()读走,而gets() 收到回车就会结束。你在scanf里加一个\n这样就会把回车读走了....
答:char s[200]; 只能放最后1个字符串。其他函数 fgets(。。。,stdin) 可代替gets, 只是 读入结果中 含行末的 '\n'=== gets 一次读一行,读取空格和tab键,读到 '\n' 为止。行数 n < 30; 每行不超过199 个字符,数组大小用 char s[30][200];for(int i=1;i<=n;i++) gets...
答:include<iostream> include<cstring> using namespace std;int main(){ string s[3]; //gets(char* ch) gets的参数是char*类型不是string型更不是string[]for(int i=0;i<sizeof(s)/sizeof(s[0]);i++)cin>>s[i];cout<<endl;for(int i=0;i<sizeof(s)/sizeof(s[0]);i++)...
网友评论:
笪晓17290909101:
C语言gets为什么不执行 -
64396扶袁
: gets函数是以换行符或者EOF为结束标志,如果用空格或者跳格,gets函数会继续等待用户输入.1、gets函数: 原型:char * gets(char * buffer); 功能:从stdin流中读取字符串,直至读到换行符或EOF时停止,并将读取的结果存放在buffer指...
笪晓17290909101:
c语言问题,gets为何不可用 -
64396扶袁
: 把getchar改为getch 因为你输入getchar的时候还要敲回车~~字符串cha2就是回车 或者在gets前面加一句scanf("%*c")或者getchar() 用来消化回车
笪晓17290909101:
gets()函数怎么不起作用啊???谁来帮帮忙解释下,感激不尽呀! -
64396扶袁
: 是不是在这个函数之前还有用scanf()函数读取变量的操作,如果是,那么就是由于这个scanf()在缓冲区中遗留了一个输入数据时按的"回车键",这个gets()会将这个字符取走,不会再等待从键盘输入.解决方法:可以在这个gets()函数的前一行加入一句fflush(stdin);刷新输入缓冲区.
笪晓17290909101:
程序里面为什么第一个gets函数不能执行,直接跳过了~~(C语言) -
64396扶袁
: 你还是理解错了 gets(ch); 是读到一行结尾,存入ch我猜你在gets之前,做过scanf之类的,scanf处理了数据,却把换行符留在那里没有处理 所以你gets得到的就只是一个空行了. getchar()的作用是读一个字符,用了它之后,就刚好吃掉了那个换行符,所以gets得以顺利运行.你可以用一个while循环,反复gets,直到读出的不是空字串. 另外一个方法是不要scanf,而是定义一个缓存,然后用gets把所有数据都读到自己的缓存字符串中,再用sscanf从字符串而不是屏幕去读取数据. 看你的应用场合了
笪晓17290909101:
C语言,gets突然不能用了, -
64396扶袁
: source_name后面多了一个右括号.
笪晓17290909101:
c++程序问题,为什么用gets()输入不了字符,程序无错,把pluskey -
64396扶袁
: 因为gets()函数接收到了回车符 在主函数中执行到if(getchar()=='a') 时,接收输入,此时我们会输入字符并按回车,我们输入的第一个字符被getchar()函数接收,而第二个之后的字符仍然在输入字符流中,所以当使用gets()时,就接收到...
笪晓17290909101:
c++为什么这里不能使用gets输入? -
64396扶袁
: 你在上面宣言加个 关于gets的吧 #include <bits/stdc++.h>用这个试试
笪晓17290909101:
C++语言学有时为什么不能拥gets输入呢 -
64396扶袁
: gets是一下读一行,连带着空格什么的都读进来了,而有时候你输入的比如12 13是表示12,13两个数字,gets却把12 13当做了一个字符串一起读进来了.而且gets读到的东西只能是字符串格式,不像cin什么的能读入数字
笪晓17290909101:
gets用不了,不给输入的机会,这是怎么回事?详见下面 -
64396扶袁
: 你scanf("%d",&n);输入一个数字后回车,回车被gets(str)接收了
笪晓17290909101:
visual studio 2015 gets 为什么用不了 -
64396扶袁
: 在2011年12月,ANSI 采纳了 ISO/IEC 9899:2011 标准,标准中删除了 gets()函数,使用一个新的更安全的函数gets_s()替代