设为首页 加入收藏

TOP

Linux C语言标准输入输出(二)
2018-10-28 16:08:27 】 浏览:385
Tags:Linux 语言 标准 输入 输出
:为什么返回值是四个字节的 int 类型?


  这是为了考虑文件结束标志 EOF 的取值。EOF 取值是 -1,如果用 unsigned 类型的话,显然取不到 -1;而如果用 char 类型的话,则 -1 对应的值为 0xff(C 语言中,数值以补码形式存储),但是 0xff 又可以是一个字节的 ASCII 码值(一些扩展字符的 ASCII > 127溢出时,可能会产生值为 0xff 的ASCII 码),这样用 EOF 显然就不能判断文件是否结束了,因为会把 ASCII 码值为 0xff 的字节误判为文件结束符。如果将返回值用 int 类型来存放的话,那么 EOF(也就是 -1)将会被保存为 0xffffffff,这时在读到 0xff,用 int 类型进行存储的话,就是 0x000000ff,就不会和 EOF 相冲突了。


八、fputc、putc 和 putchar 函数


  fputc 函数把一个字符写到一个输出文件流中。它返回写入的值,如果失败,则返回 EOF。


#include <stdio.h>


int fputc(int c,FILE *stream);    // 需要注意的是,这里的 c 其实是字符,把字符当做 int 类型而不是 char 类型
int putc(int c,FILE *stream);
int putchar(int c);


  putc 函数的作用与 fputc 函数一样,但是它能被实现为一个宏。putchar 函数相当于 putc(c,stdout),它把单个字符写到标准输出。 


  注意:putchar 和 getchar 都是把字符当做 int 类型而不是 char 类型来使用的,理由上面有讲。用一个例子演示一下 fgetc 和 fputc 函数的用法:


#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>


int main()
{
        int buf;
        FILE *file = fopen("linuxidc.txt","r");
        if(file == NULL){
                printf("fail to open the file!\n");
                exit(1);
        }


        while((buf = fgetc(file)) != EOF){
                fputc(buf,stdout);
        }
        fclose(file);


        exit(0);
}


Linux C语言标准输入输出


输出:


  这段代码打开文件 hello.txt,并使用 fgetc 函数将文件中的内容一个字节一个字节地取出,同时使用 fputc 函数将该字节写到标准输出流中,直到文件结束。


九、fgets 和 gets 函数


  fgets 函数从输入文件流 stream 里读取一个字符串,并存放到缓冲区中,一次??取的字符个数有限制。


#include <stdio.h>


char *fgets(char *s,int n,FILE *stream);
char *gets(char *s);


  fgets 函数把读到的字符写到 s 指向的字符串里,直到:


1)遇到换行符,则停止读入字符,并将遇到的换行符一起传递给接收字符串,再加上一个表示结尾的空字节 \0;


2)已经传输了 n-1 个字符,则加上一个空字节 \0 结尾后,停止读入字符;


3)到达文件尾(EOF)。


  当成功调用函数时,fgets 返回一个指向字符串 s 的指针。如果文件流已经到达文件尾,fgets 会设置这个文件流的 EOF 标识并返回一个空指针;如果调用函数出错,则 fgets 返回一个空指针并设置 errno 以指出错误的类型。


  gets 函数类似于 fgets,只不过它直接从标准输入(stdin)读取数据并丢弃了遇到的换行符,它在接收字符串的尾部加上一个 null 字节、另外,需要注意的是,gets 函数并没有对传输字符的个数做限制,所以它可能会溢出自己的传输缓冲区。因此,一般来说,推荐使用 fgets 函数来替代 gets 函数。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++中重载、覆盖和隐藏的区别以及.. 下一篇C++中的函数及参数介绍

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目