• fgetc/fputc 和 fgets/fputs 的详细用法


    一.fgetc/fputc函数使用

    1. int fgetc(FILE *stream);
    2. 功能:从文件中读取一个字符
    3. 参数:
    4.     @stream:文件指针
    5. 返回值:成功返回字符的ascii,失败返回-1(EOF)
    6.  int fputc(int c, FILE *stream);
    7. 功能:向文件中写入一个字符
    8. 参数:
    9.  @c:被操作的字符
    10.  @stream:文件指针
    11. 返回值:成功返回被写入字符的ascii,失败返回EOF(-1)

    1.1fgetc函数使用实例

    head.h ===>将head.h放入到/usr/include目录下

    1. #ifndef __HEAD_H__
    2. #define __HEAD_H__
    3. #include 
    4. #define PRINT_ERR(msg) \
    5.     do { \
    6.         perror(msg); \
    7.         return -1; \
    8.     } while (0)
    9. #endif
    1. #include   
    2. int main(int argc, const char* argv[])
    3. {
    4.     FILE* fp;
    5.     int c;
    6.     if ((fp = fopen("./hello.txt""r")) == NULL)
    7.         PRINT_ERR("fopen error");
    8.     c = fgetc(fp);  //读取到hello.txt第一个字符,光标会向后移动一个字符的位置
    9.     printf("c = %c\n",c);//将读取到的字符打印到终端上
    10.     c = fgetc(fp); //读取hello.txt的第二个字符,光标会向后移动一个字符的位置
    11.     printf("c = %c\n",c);//将读取到的字符打印到终端上
    12.     fclose(fp);
    13.     return 0;
    14. }

    1.2使用fgetc函数统计一个文件有多少行?

    1. #include 
    2. int main(int argc,const char * argv[])
    3. {
    4.     FILE *fp;
    5.     int ch,count=0;
    6.     //1.判断用户传参是否正确
    7.     if(argc != 2){
    8.         printf("input error,try again\n");
    9.         printf("usage: ./a.out filename\n");
    10.         return -1;
    11.     }
    12.     //2.打开文件
    13.     if((fp = fopen(argv[1],"r"))==NULL)
    14.         PRINT_ERR("fopen error");
    15.     //3.从文件中读取换行符,让计数变量++
    16.     while((ch=fgetc(fp)) != EOF){
    17.         if(ch == '\n')count++;
    18.     }
    19.     printf("line = %d\n",count);
    20.     //4.关闭文件
    21.     fclose(fp);
    22.     return 0;
    23. }

    1.3fputc函数使用实例

    1. #include 
    2. int main(int argc,const char * argv[])
    3. {
    4.     FILE *fp;
    5.     if((fp = fopen("./hello.txt","w"))==NULL)
    6.         PRINT_ERR("fopen error");
    7.     
    8.     fputc('h',fp);
    9.     fputc('e',fp);
    10.     fputc('l',fp);
    11.     fputc('l',fp);
    12.     fputc('o',fp); //会将上述的字符写入到hello.txt中
    13.     fputc('w',stdout); //写到终端上
    14.     fputc('e',stderr); //写到终端上
    15.     fclose(fp);
    16.     return 0;
    17. }

    1.4使用fgetc和fputc完成文件的拷贝过程

    ./a.out srcfile destfile

    1. #include 
    2. int main(int argc, const char* argv[])
    3. {
    4.     FILE *sfp, *dfp;
    5.     int ch;
    6.     // 1.判断用户传递的参数是否正确
    7.     if (argc != 3) {
    8.         printf("input error,try again\n");
    9.         printf("usage:./a.out srcfile destfile\n");
    10.         return -1;
    11.     }
    12.     // 2.打开源文件和目标文件
    13.     if ((sfp = fopen(argv[1], "r")) == NULL)
    14.         PRINT_ERR("open srcfile error");
    15.     if ((dfp = fopen(argv[2], "w")) == NULL)
    16.         PRINT_ERR("open destfile error");
    17.     //3.循环读写字符
    18.     while((ch = fgetc(sfp)) != EOF){
    19.         fputc(ch,dfp);
    20.     }
    21.     //4.关闭文件
    22.     fclose(sfp);
    23.     fclose(dfp);
    24.     
    25.     return 0;
    26. }

    二.fgets/fputs函数使用

    1. char *fgets(char *s, int size, FILE *stream);
    2. 功能:从文件读读取字符串到s中,遇到EOF或者'\n'的时候停止读
    3.     并且会将'\n'也一并读取到存储在s对应的缓冲区中,在最后的位置
    4.     补充'\0'
    5. 参数:
    6.     @s:保存字符串的地址
    7.  @size:向读取的大小
    8.  @stream:文件指针
    9. 返回值:成功返回s地址,失败返回NULL
    10. int fputs(const char *s, FILE *stream);
    11. 功能:将s中的字符串写入到文件中
    12. 参数:
    13.     @s:字符串的首地址
    14.  @stream:文件指针
    15. 返回值:成功返回大于0的数,失败返回EOF(-1)

    2.1fgets函数的使用实例(通过终端向程序输入字符串)

    1. #include 
    2. int main(int argc,const char * argv[])
    3. {
    4.     char buf[128] = {0};
    5.     //hello\n\0
    6.     //从标准输入中读取字符串到buf中
    7.     fgets(buf,sizeof(buf),stdin);
    8.     //将缓冲区中的'\n换成'\0'
    9.     buf[strlen(buf)-1] = '\0';
    10.     printf("result = %s\n",buf);
    11.     
    12.     return 0;
    13. }

    2.2fgets函数的使用实例(从文件中读取字符串)

    1. #include 
    2. int main(int argc,const char * argv[])
    3. {
    4.     FILE *fp;
    5.     char buf[128] = {0};
    6.     if((fp = fopen("./hello.txt","r"))==NULL)
    7.         PRINT_ERR("fopen error");
    8.     fgets(buf,6,fp);
    9.     printf("buf = %s\n",buf);
    10.     fclose(fp);
    11.     return 0;
    12. }

    2.3练习:使用fgets统计一个文件有多少行?

    1. #include 
    2. int main(int argc,const char * argv[])
    3. {
    4.     FILE *fp;
    5.     int line=0;
    6.     char buf[10] = {0};
    7.     //1.判断用户传参是否正确
    8.     if(argc != 2){
    9.         printf("input error,try again\n");
    10.         printf("usage: ./a.out filename\n");
    11.         return -1;
    12.     }
    13.     //2.打开文件
    14.     if((fp = fopen(argv[1],"r"))==NULL)
    15.         PRINT_ERR("fopen error");
    16.     //3.从文件中读取换行符,让计数变量++
    17.     while(fgets(buf,sizeof(buf),fp) != NULL){
    18.         if(strlen(buf)==(sizeof(buf)-1)){
    19.             if(buf[sizeof(buf)-2] != '\n'){
    20.                 continue;
    21.             }
    22.         }
    23.         line++;
    24.     }
    25.     printf("line = %d\n",line);
    26.     //4.关闭文件
    27.     fclose(fp);
    28.     return 0;
    29. }

    2.4fputs函数的使用实例

    1. #include 
    2. int main(int argc, const char* argv[])
    3. {
    4.     FILE* fp;
    5.     //使用fputs向标准输出和标准出错中显示内容
    6.     fputs("hello world\n", stderr);
    7.     fputs("123123123\n", stdout);
    8.     if ((fp = fopen("./hello.txt""a")) == NULL)
    9.         PRINT_ERR("fopen error");
    10.     fputs("this is IO process .....\n",fp);
    11.     fclose(fp);
    12.     return 0;
    13. }

    2.5使用fputs和fgets拷贝文件

    1. #include 
    2. int main(int argc, const char* argv[])
    3. {
    4.     FILE *sfp, *dfp;
    5.     char buf[10] = {0};
    6.     // 1.判断用户传递的参数是否正确
    7.     if (argc != 3) {
    8.         printf("input error,try again\n");
    9.         printf("usage:./a.out srcfile destfile\n");
    10.         return -1;
    11.     }
    12.     // 2.打开源文件和目标文件
    13.     if ((sfp = fopen(argv[1], "r")) == NULL)
    14.         PRINT_ERR("open srcfile error");
    15.     if ((dfp = fopen(argv[2], "w")) == NULL)
    16.         PRINT_ERR("open destfile error");
    17.     //3.循环读写字符
    18.     while(fgets(buf,sizeof(buf),sfp)!=NULL){
    19.         fputs(buf,dfp);
    20.     }
    21.     //4.关闭文件
    22.     fclose(sfp);
    23.     fclose(dfp);
    24.     
    25.     return 0;
    26. }
  • 相关阅读:
    【完美世界】被骂国漫之耻,石昊人设战力全崩,现在真成恋爱世界了
    电脑开机就一直自动修复,固态硬盘突然变成RAW格式,怎么数据恢复(未解决)
    LeetCode-17-电话号码的字母组合
    面试算法31:最近最少使用缓存
    美国零售电商平台Target,值得入驻吗?如何入驻?
    医美健康这类在医疗行业的推广要怎么做?
    APP自动化测试-5.触屏操作及toast处理
    [推荐系统] 1. 深度学习与推荐系统
    shell中算术运算小结
    Python例题练习1
  • 原文地址:https://blog.csdn.net/a2998658795/article/details/126712813