c语言获取终端输入字符串的函数scanf,gets,fgets

c语言获取终端输入字符串的函数scanf,gets,fgets,第1张

c语言获取终端输入字符串函数scanf,gets,fgets 获取终端输入字符串scanf,gets,fgets 获取终端中输入字符串,我们常用getchar(),scanf(),gets(),和fgets()函数实现,这里简单汇总一下:

​ scanf() 函数可以获取到终端字符串,但是不能识别到空格字符,遇到空格会终止,空格后面的字符串会在缓冲区中,下次获取时会继续用。

​ gets()函数以回车字符进行标识,获取用户输入字符串以回车为终止符。

​ scanf和gets函数都是不安全的,如果目标字符串缓冲区无法存储我们输入的字符串,会导致段错误

​ fgets()函数限定了获取字符串的长度,如果输入字符串过多,依然可以只获取限定长度的字符串,剩下的字符串还在输入缓冲区中。

测试demo以及输入测试描述:
#include 
#include 
#include 

//scanf输入遇到空格会当成结束符
//gets是遇到回车结束 fgets其实对gets的一些完善扩展
int main()
{
//scanf 读取终端内容时  遇到空格会终止
// 终止后剩余的结果其实还在终端缓冲区中,会在后面读取缓冲区继续生效
	char data[20];
	printf("please test of scanf :n");
	scanf("%s", data);
	printf("scanf func get data is [%s] n", data);
	memset(data, 0, 20);
	printf("please test of space scanf :n");
	scanf("%s", data);
	printf("scanf func get data is [%s] n", data);
	memset(data, 0, 20);
	fflush(stdin);	//可以刷新缓冲区 一般用在读数据后没读完

//gets可以读取换行前的所有字符,但是gets是不安全的,如无法保证长度越界
	printf("please test of gets n");
	gets(data);
	printf("gets func get data is [%s] n", data);
	memset(data, 0, 20);
	printf("please test of space gets :n");
	gets(data);
	printf("gets func get data is [%s] n", data);
	memset(data, 0, 20);
//使用fgets函数  对gets函数的扩展,限定了读取数据的长度
	printf("plese test of fgets : n");
	fgets(data,  20, stdin); //字符串地址  字符串长度   读入的文件   
	printf("fgets func get data is : [%s]", data);

	memset(data, 0, 20);
	printf("please test of len out of 20 fgets:n");
	fgets(data,  20, stdin);
	printf("fgets func get data is : [%s] n", data);
	memset(data, 0, 20);
	fflush(stdin);
	return 0;
}








欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5580059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存