首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c语言中怎样用scanf()读入带空格的字符串?解决方法

2013-07-09 
c语言中怎样用scanf()读入带空格的字符串?#include stdio.hint main(void){int ichar a[5]scanf(%s,

c语言中怎样用scanf()读入带空格的字符串?
#include <stdio.h>

int main(void)
{
    int i;
    char a[5];

    scanf("%s", a);
    printf("%s\n", a);
   
    return 0;

}

运行输入hello world  
回车
则输出的只是空格之前的部分,怎样把空格之后的部分也输出呢?
[解决办法]
谁说scanf不能做到?


#include <stdio.h>
int main()
{
    char str[128];
    scanf( "%[^\n]", str );
    printf( "%s\n", str );
    return 0;
}


[解决办法]
#include <stdio.h>
 
//char *fgets( char *str, int num, FILE *stream );

int main()
{
char buffer[10];

//fgets(buffer,10,stdin); //这个带有回车符
gets(buffer);//这个没有回车符

printf("%s",buffer);

return 0;
}

[解决办法]
引用:
谢谢各位了
真是博大精深啊
小弟正在学C基础呢
现在明白一点了,用gets()最能满足我现在的需要,fgets()连回车符都获取了
至于scanf()用正则表达式,那就更高深了,等小弟以后慢慢研究吧

有点疑问:用gets(),为什么在编译时提示这个函数很危险呢?(ubuntu系统 gcc编译器)

因为这个函数没有边界检查!
[解决办法]
引用:
谢谢各位了
真是博大精深啊
小弟正在学C基础呢
现在明白一点了,用gets()最能满足我现在的需要,fgets()连回车符都获取了
至于scanf()用正则表达式,那就更高深了,等小弟以后慢慢研究吧

有点疑问:用gets(),为什么在编译时提示这个函数很危险呢?(ubuntu系统 gcc编译器)


因为gets() 不检查字符串容量,有可能越界写数据,用户可不一定给你按套路出牌,可能输入长达300字节甚至2k字节的字符串,这样的话很危险很危险。。。。。
虽然strlen,strcyp等等这些函数因为追求高效率也不会检查指针是否为空,指针是否可写,但是这些函数是C程序员来操作的,C程序员有正确使用函数的素质。但是gets() 是用户来输入,用户并不知道字符串上限,而且就算知道,也不一定有素质去按规定使用  所以要多多注意!~

热点排行