C语言学习笔记(6)——字符串的输入输出

之前讲的putchar(),getchar()都是字符的输入输出,字符串的输入输出除了基本的scanf(),printf(),也有puts(),gets(),fgets(),fputs()等。

如果想要把一个字符串读取到程序当中,得先为它预留一个存储空间,再用输入函数获取字符串。

预留存储空间的话要么提前定义好大小的数组,要么用分配内存空间的函数

1.gets()函数

gets代表get string,它对于交互式程序比较友好,它从系统的标准输入设备(通常是键盘)获得一个字符串,但是字符串没有预定的长度,它得知道什么时候读取结束,这时候换行符就是停止标志,而回车键就能提供换行符,它会读取换行符之前的所有字符,并添加一个空字符(\0)交给程序。

#include <stdio.h>
#define MAX 81
int main(void )
{
	char name[MAX];
	char * ptr;

	printf("Hi,what's your name?\n");
	ptr = gets(name);
	printf("%s? Ah! %s is a good name\n",name,ptr);

	return 0;
	
}

输出结果如下

Hi,what's your name?
God
God? Ah! God is a good name

gets()它使用一个地址将字符串赋予给了name,并返回了一个指向字符串的指针值,但是如果出错或遇到文件结尾则返回空地址。

2.fgets()

gets()一个不足就是不检查预留空间是否能够容纳实际输入的数据,多出的字符就溢出到相邻的内存区了。fgets()则解决这个问题,但是fgets()是为读取文件而设计,在标准键盘输入上就不如gets()那么方便。

#include <stdio.h>
#define MAX 81
int main(void )
{
	char name[MAX];
	char * ptr;

	printf("Hi,what's your name?\n");
	ptr = fgets(name,MAX,stdin);
	printf("%s? Ah! %s is a good name\n",name,ptr);

	return 0;
	
}

运行结果如下:

Hi,what's your name?
God
God
? Ah! God
 is a good name

可以看出fgets()与gets()三个方面的不同

1.它需要第二个参数来说明最大读入字符数。如果这个参数值为n, fgets ()就会读取最多n~1个
字符或者读完一一个换行符为止,由这二者中最先满足的那个来结束输入。
2.它还需要第三个参数来说明读哪一个文件。从键盘上读数据时,可以使用stdin(代表standard imput)作为该参数,这个标识符在stdio.h中定义。

3.如果fgets ()读取到换行符,就会把它存到字符串里,而不是像gets ()那样丢弃它。如结果所示,每次显示字符串的时候都会捎带一个换行符。

3.puts()

puts()函数的使用很简单,只需要给出字符串参数的地址,与printf()不同,puts()显示字符串时自动加换行符,它的问题是必须检测到表示结束的空字符

4.fputs()

fputs ()函数是gets ()的面向文件版本。两者之间的主要区别是:
fputs ()需要第二个参数来说明要写的文件。

可以使用stdout (代表standard output)作为参数来
进行输出显示,stdout 在stdio.h中定义。

与puts ()不同,fputs ()并不为输出自动添加换行符。

之所以这样是因为puts() gets()搭配使用,fputs() fgets()搭配使用。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值