一、问题
输⼊字符串使⽤的是 gets()函数,其作⽤是将读取的字符串保存在形式参数 str 变量中。那么该如何使⽤该函数呢?
二、解答
gets()函数将⼀直读取字符串,直到出现新的⼀⾏为⽌。其中,新的⼀⾏的换⾏字符将会转化为字符串中的空终⽌符' \0 '。gets()函数的定义如下。
char *gets(char *str);
在使⽤ gets()函数前,要为程序加⼊头⽂件 stdio.b。其中,str 字符指针变量为形式参数。例如,定义字符数组变量 ch,然后使⽤ gets()函数获取输⼊字符的⽅式如下。
gets(ch);
在上⾯的代码中,ch 变量获取到了字符串,并将最后的换⾏符转化成了终⽌字符。 使⽤字符串输⼊函数 gets()获取输⼊信息的程序如下。
#include <stdio.h>
int main()
{char ch[30];gets(ch);puts(ch);return 0;
}
(1)因为要接收输⼊的字符串,所以要定义⼀个可以接收字符串的变量。在上述代码中,定义 ch 为字符数组变量的标识符。有关字符数组的内容将在后⾯的章节介绍,在此只需知道此变量可以接收字符串即可。
(2)调⽤ gets()函数,其中参数为定义的 ch 变量。调⽤该函数时,程序会等待⽤户输⼊字符;当⽤户输⼊完字符并按 Enter 键确定时,gets()函数获取字符结束。
(3)使⽤字符串输出函数 puts()将获取后的字符串进⾏输出。
输出结果如下
Hello world
Hello world
注意
gets()函数由于存在安全风险(无法限制读取字符串的长度,可能导致缓冲区溢出),在C11标准
中已被废弃。现代C编程推荐使用fgets()函数替代。
三、总结
从上⾯可以看出,当输⼊的字符串中含有空格时,输出仍为全部字符串。这说明 gets()函数并不以空格作为字符串输⼊结束的标志,⽽只以回车作为输⼊结束。这是与 scanf()函数不同的。