关于字符串输入的问题

今天在做一个关于字符串的程序的时候,出现了一个问题,用scanf函数无法接受一个含空格的字符串,于是自己就找了一下网上的资料,自己在整理了下。

scanf函数可以接受一个字符串,但是遇到空格或者换行它就会结束输入,无法在字符串中加入空格,而gets函数可以接受空格到字符串中,两个函数都会在输入结束后加上‘’。

本来以为用gets函数就好了,但是又遇到了新的问题,调试的时候遇到了警告: the `gets' function is dangerous and should not be used.(系统是ubuntu,用gcc调试),

这个警告意思是说gets函数是危险的,不应该被使用。解决的方法是使用fgets函数,fgets(char*,int size,stdin),其中stdin表示标准输入,意思就是从键盘上接受输入的字符,

这个函数控制了接受字符的大小,从而避免了接收的一个过大字符串到数组的问题,看下代码和运行结果吧。

 1 int main()
 2 {
 3     char str1[10];
 4     char str2[10];
 5     fgets(str1,10,stdin);            //使用fgets接受含空格的字符串
 6     scanf("%s",str2);            //scanf无法接收
 7 //    gets(str);                //会有警告出现
 8     printf("str1=%s",str1);
 9     printf("str2=%s
",str2);
10     return 0;
11 }
123 456
123 456
str1=123 456
str2=123

输入的两个里面都含有空格,但是只有str1能接收到,即用fgets函数。

原文地址:https://www.cnblogs.com/kingos/p/4524874.html