当前位置: 代码迷 >> C语言 >> [求助]用scanf如何接收带空格的字符串?
  详细解决方案

[求助]用scanf如何接收带空格的字符串?

热度:280   发布时间:2005-05-13 10:11:00.0
[求助]用scanf如何接收带空格的字符串?
用scanf如何接收带空格的字符串?
搜索更多相关的解决方案: scanf  空格  字符  

----------------解决方案--------------------------------------------------------
单个接收就是了
如:
char s[5];
int i;
for(i=0;i<5;i++)
  scanf("%c",&s[i]);


----------------解决方案--------------------------------------------------------
奇怪了~,我以为可以用scanf("%s",s);接收,但是一遇到空格就停止接收了,这是scanf函数的一个特性吗?为什么用单个字符就可以接收呢?
----------------解决方案--------------------------------------------------------
不是说%s就不能接收了,也可以接收,只是你输入的时候出的问题:
  比如输入 zk er,
  输入zk没有问题,但遇到空格就不行了,我猜可能是因为scanf认为空格就是字符串的结束,把它当成了NULL,然后对之后的字符就不考虑了。
  你可以用以下的方法实验一下就知道了:
   
   main()
{
  int i;
  char s[5];
  clrscr();
  scanf("%s",&s);
  for(i=0;i<5;i++)
     printf("%x ",s[i]);
  getch();
}

你输入zk er ,会看到输出到空格时就变成0了。
----------------解决方案--------------------------------------------------------
是呀,而gets就没有这种情况,,也许因为这个原因所以很少人用scanf吧?谢谢edgeman回答我的疑问!
----------------解决方案--------------------------------------------------------
以下是引用zker在2005-5-13 11:38:44的发言: 奇怪了~,我以为可以用scanf("%s",s);接收,但是一遇到空格就停止接收了,这是scanf函数的一个特性吗?为什么用单个字符就可以接收呢?
对,这是scanf的一个结束特性 当输入遇到空格,制表符,回车等时都会结束!!!
----------------解决方案--------------------------------------------------------
gets 函数能实现空格输入,然而 gets 函数是个不推荐使用的函数, 因为它有个能致命的缺陷,就是不能指定缓冲区,当输入的字符大于缓冲区写入的空间, 会使缓冲区溢出,这将有可能会导致不可预料的错误,这种错误可能是非常严重的。 建议使用 fgets 来代替。 缓冲区溢出的相关信息,你可以查看 缓冲溢出攻击及安全防范体系 [URL=http://www.yesky.com/SoftChannel/72356682675519488/20030823/1723624_1.shtml]http://www.yesky.com/SoftChannel/72356682675519488/20030823/1723624_1.shtml[/URL] Internet 上有很多关于避免这种意外的处理方法,有兴趣的可以去找找。
----------------解决方案--------------------------------------------------------
用gets()吧,因为scanf()函数遇到空字符就会自动停止。
----------------解决方案--------------------------------------------------------
学到不少。
----------------解决方案--------------------------------------------------------
谢谢大家!!!
----------------解决方案--------------------------------------------------------
  相关解决方案