linux io操作------标准IO输入输出函数之get与put系列

get家族:获取/输入
1、从标准输入缓冲区获取一个字符:getchar

int getchar(void);

返回值:
成功:获取到的字符的ASCII码值
失败:EOF
应用场合:
一般用来吸收scanf输入后留在缓冲区里的’\n’
例如:while(getchar() != ‘\n’);

2、从指定缓冲区中获取一个字符:getc和fgetc

int getc(FILE *stream);
int fgetc(FILE *stream);

参数:
FILE *stream:文件流指针
返回值:
成功:获取到的字符的ASCII码值
失败:EOF(也有可能是从文件末尾开始读取)
这两个函数都是从指定的文件中获取一个字符,但区别在哪?
getc是一个宏,fgetc是一个函数

思考:如果文件中没有数据,使用getc或fgetc去获取一个字符,结果会如何?
结果:不会阻塞,因为文件没有行缓冲机制,返回值为-1,因为定位相当于在文件末尾

3、从指定缓冲区中获取一个字符串:fgets和gets

char *fgets(char *s, int size, FILE *stream);

参数:
char *s:保存获取到的字符串
int size:要获取的字符串的长度(size最好多设置一位,因为fgets默认最后一个字节会给’\0’)
FILE *stream:文件流指针
返回值:
成功:获取到的字符串
失败:NULL

还有另一个函数gets也是从标准输入缓冲区中获取字符串
char *gets(char *s);
在man手册中对gets有这么一段说明:
BUGS
Never use gets(). Because it is impossible to tell without knowing the data in advance how many characters
gets() will read, and because gets() will continue to store characters past the end of the buffer, it is
extremely dangerous to use. It has been used to break computer security. Use fgets() instead.
因为gets没有定义缓冲区的大小,容易造成缓冲区溢出,导致段错误,但在某些编译器中可以使用
但在linux下,编译时就会报警告:warning: the `gets’ function is dangerous and should not be used.
并且在强行执行时,在输入后会段错误:
gec@ubuntu:/mnt/hgfs/wh2302/3-文件IO/day3/code$ ./get
hello
buf=hello
Segmentation fault (core dumped)

put家族:输出
1、输出一个字符:putchar和puc和fputc

int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar(int c);

参数:
int c:要输出的字符,可以是ASCII码,也可以是字符数据
FILE *stream:文件流指针
返回值:
成功:输出字符的ASCII码值
失败:EOF
putchar:只能向标准输出缓冲区输出
putc和fputc可以向指定文件中输出,但如果没有正常关闭文件,是无法保存到文件中去

2、输出字符串:puts和fputs

int fputs(const char *s, FILE *stream);
int puts(const char *s);

参数:
const char *s:要输出的字符串
FILE *stream:文件流指针
区别:fputs可以向指定文件中输出,puts默认向标准输出缓冲区输出
返回值:
成功:非负数
失败:EOF

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值