<C程序设计试题汇编>6.47gets函数的疑问
代码:
char a1[5],a2[5],a3[5],a4[5];
scanf( "%s%s ",a1,a2);
gets(a3);gets(a4);
puts(a1); puts(a2);
puts(a3); puts(a4);
程序运行,输入:aa_bb <CR> (_为空格, <CR> 为回车)
cc_dd <CR>
程序输出:
aa
bb
cc_dd
前面的aa bb没有问题,可后面的空行和cc_dd什么原因,不明白?
注:程序运行到最后有一个Debug Error:
Run-Time Check Failure #2 - Stack around the variable 'a4 ' was corrupted.
我用的是VS2005
[解决办法]
aa bb后的回车读到a3
cc dd整个串读到a4
[解决办法]
scanf以输入缓冲区内的空白(空格,回车,tab)为结束标记,而gets以回车为结束标记。
用scanf输入后的回车会仍留在缓冲区内,而gets不会。