关于scanf函数的问题

#include<stdio.h>

int  main()

{

int a;char b;

scanf("%d",&a);

scanf("%[^.]",&b);

printf("%d",a);

printf("%c1",b);

return 0;

 } 

请问为什么我这个代码中的a得不到正确的结果,如:输入6回车输入.回车

最后得到得结果为a=0;这是什么原因?

慕牧羊6158366
浏览 759回答 1
1回答

onemoo

原因是用 %[] 的那句 scanf 用错了。%[] 这个格式化指示符对应的其实是字符串,而非字符。或者说,它在匹配结束后,会再存一个 null 字符进去(用于构成字符串结尾)。代码中你错误地只用一个字符去接收 %[] 的匹配结果,而最后的 null 字符仍会被写到 b 的后面,这样就写越界了。至于为什么你看到 a 的结果为 0?  很可能在你编译出的程序中 a 的内存位置刚好在 b 后面,所以 a 中的结果被覆盖了。
打开App,查看更多内容
随时随地看视频慕课网APP