打开一个数据文件,一般用fopen函数。但是一些编译器(我用的VS2013)编译无法通过,提示用fopen_s函数代替。


1. fopen_s函数的用法

fopen_s函数声明如下:

errno_t fopen_s ( 
    FILE** pFile, 
    const char *filename, 
    const char *mode 
);
  • fopen_s函数有3个参数,它的调用方式为:fopen_s(指针,文件名,使用文件方式);
  • FILE** pFile:其中指针是用来接收 <指向目标文件的指针> 的指针。

    • fopen函数的返回值就是这里的FILE** pFile
    • 参数定义:FILE *fp;
      fp是一个指向FILE类型数据的指针;&p就是指向FILE类型数据的指针的地址,也就是<指向FILE类型数据的指针变量>的指针。只要记住,fopen_s的参数用法类似如下:
      FILE *fp;
      fopen_s(&fp, filename, "w")
  • fopen_s函数的返回值与fopen不同。正确打开返回0,不正确返回非0。

    • 要定义一个变量err来接收fopen_s函数的返回值,即:
      errno_t err;
      其中errno_t是int的别名,typedef int errno_t;,即err是个整型值。通过判断err的值是否为0,可以知道打开数据文件成功与否。

    • 判断打开成功与否fopen_s用:
      (err = fopen_s(&fp, filename, “w”)) !=0

    • 而fopen判断打开成功与否,用:
      fp = fopen(filename, “w”)) == NULL
      打开失败返回空指针NULL。


2. 程序实例

从键盘输入一些字符,逐个把它们送到磁盘上去,直到用户输入一个“#”为止。

#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE *fp;
    errno_t err;                                    //不同点1
    char ch, filename[10];
    printf("请输入所用的文件名:");
    scanf_s("%s", filename,10);
    if ((err = fopen_s(&fp, filename, "w")) !=0)    //不同点2
    {
        printf("无法打开此文件\n");            //如果打不开,就输出打不开
        exit(0);                               //终止程序
    }
    ch = getchar();                            //用来接收最后输入的回车符
    printf("请输入一个准备存储到磁盘的字符串(以#结束):");
    ch = getchar();                            //用来接收从键盘输入的第一个字符
    while (ch != '#')                          //当输入“#”时结束循环
    {
        fputc(ch, fp);                         //向磁盘输出一个字符
        putchar(ch);                           //将输出的字符显示在屏幕上
        ch = getchar();                        //再接收从键盘输入的一个字符
    }
    fclose(fp);                                //关闭文件
    putchar(10);                               //向屏幕输出一个换行符
    return 0;
} 

C程序输出结果:

请输入所用的文件名:file1.dat
请输入一个准备存储到磁盘的字符串(以#结束):computer and c#
computer and c
请按任意键继续. . .
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐