1. 首页 > 科技

怎么在gcc中使用fopen_s? fopen s的返回值2

怎么在gcc中使用fopen_s?fopen s的返回值2

fopen_s用法的问题

你的 fopen_s 写法有误,其中的 pic, file, finish 是变量不加引号,如果加了引号变成了字符串了。

应该是:

...

a = fopen_s(&f_pic, pic, "rb");

...

b = fopen_s(&f_file, file, "rb");

...

c = fopen_s(&f_finish, finish, "wb");

fopen_s的访问方式

"r"

打开以进行读取。如果该文件不存在,或无法找到,fopen_s调用失败。

"w"

打开一个空文件以进行写入。如果该文件存在,其内容将被销毁。

"a"

打开以进行写入 (追加) 而不将新数据写入文件之前删除的 EOF 标记文件的末尾。如果它不存在,则创建该文件。

"r+"

将打开并读取和写入。 (该文件必须存在。

"w+"

打开一个空的文件进行读写。如果该文件存在,其内容将被销毁。

"a+"

将打开并读取文件和追加。追加操作包括删除 EOF 标记的新数据写入到文件并在编写完成后还原 EOF 标记之前。如果它不存在,则创建该文件。

通过打开文件时"a"或"a+"访问类型,所有写操作出现在文件的结尾。可通过使用定位文件指针fseek或rewind,但其始终移回至该文件的末尾之前任何写入,因此无法覆盖现有数据执行操作。

"a"模式下不会追加到该文件之前删除 EOF 标记。追加发生后,MS-DOS TYPE 命令仅显示最原始的 EOF 标记的数据和追加到文件中没有任何数据。"a+"模式不会追加到该文件之前删除的 EOF 标记。后追加,MS-DOS TYPE 命令在文件中显示所有数据。"a+"模式所需的追加到流文件,将终止通过使用 CTRL + Z EOF 标记。

当"r+","w+",或"a+"指定访问类型,允许读取和写入。 (就说是打开"更新"文件)。 但是,当从阅读切换到书写,输入的操作必须会遇到 EOF 标记。如果没有任何 EOF,则必须使用中间文件定位函数调用。文件定位函数是fsetpos,fseek,和rewind.从读数到写切换时,您必须使用中间调用fflush或文件定位函数。

除了上面的值中,下列字符可以包含在mode指定换行字符的转换模式:

t

以文本形式打开 (翻译) 模式。在此模式中,CTRL + Z 被解释为对输入文件结尾字符中。要读取/写入与打开的文件中"a+",fopen_s检查 CTRL + Z 结尾的文件并移除它,如果可能的话。这是因为使用fseek和ftell在结尾为 CTRL + Z,可能会导致文件移动fseek文件末尾附近的不当行为。

此外,在文本模式下,回车 – 换行组合被翻译成在输入时,一个换行符) 和换行符转换为回车 – 换行组合输出上。当 Unicode 流 i/o 函数操作文本模式 (默认值),源或目标流被认为是多字节字符的序列。因此,Unicode 流输入函数将多字节字符转换为宽字符 (如果通过调用mbtowc函数)。出于同样的原因,Unicode 流输出函数将宽字符转换为多字节字符 (如果通过调用wctomb函数)。

b

打开二进制 (未翻译) 模式 ; 翻译涉及回车和换行字符不会显示。

如果t或b中没有给出mode,默认转换模式定义全局变量_fmode。如果t或b将作为参数,函数将失败并返回前缀NULL.

有关使用文本和二进制模式中 Unicode 和多字节流 i/o 的详细信息,请参阅文本和二进制模式文件 I/O和Unicode 文本和二进制模式中的流 I/O。

c

启用提交标记关联的filename,以便文件缓冲区的内容将直接写入磁盘,如果任一fflush或_flushall调用。

n

重置该提交标记关联的filename为"无约束" 这是默认设置。它还重写全局提交标志,如果链接您的程序使用 COMMODE.OBJ。全球提交标志默认设置是"无约束" 除非您显式链接您的程序使用 COMMODE。OBJ (请参阅链接选项)。

N

指定的文件不由子进程继承。

S

指定的缓存优化的但不是限于,顺序访问磁盘。

R

指定的缓存优化的但不是限于,随机访问磁盘。

T

指定临时文件。如有可能,它未被刷新到磁盘。

D

指定临时文件。最后的文件指针被关闭时,它将被删除。

ccs=ENCODING

指定编码的字符集可用于此文件 (utf-8、 UTF-16LE 和 UNICODE)。离开这未指定是否希望 ANSI 编码。

有效的字符mode中使用的字符串fopen_s和_fdopen对应于oflag参数中使用_ 打开和_sopen,如下。 a _O_WRONLY | _O_APPEND(通常_O_WRONLY | _O_CREAT |_O_APPEND) a+ _O_RDWR | _O_APPEND(通常_O_RDWR | _O_APPEND | _O_CREAT) r _O_RDONLY r+ _O_RDWR w _O_WRONLY(通常_O_WRONLY |_O_CREAT | _O_TRUNC) w+ _O_RDWR(通常_O_RDWR | _O_CREAT | _O_TRUNC) b _O_BINARY t _O_TEXT c 无 n 无 S _O_SEQUENTIAL R _O_RANDOM T _O_SHORTLIVED D _O_TEMPORARY ccs=UNICODE _O_WTEXT ccs=UTF-8 _O_UTF8 ccs=UTF-16LE _O_UTF16

求问用VC编译C语言程序中fopen_s的具体使用方式

支持一下感觉挺不错的

gcc怎样使用命令

[root@Comisys02 ~]# gcc --help

用法:gcc [选项] 文件...

选项:

-pass-exit-codes 在某一阶段退出时返回最高的错误码

--help 显示此帮助说明

--target-help 显示目标机器特定的命令行选项

(使用‘-v --help’显示子进程的命令行参数)

-dumpspecs 显示所有内建 spec 字符串

-dumpversion 显示编译器的版本号

-dumpmachine 显示编译器的目标处理器

-print-search-dirs 显示编译器的搜索路径

-print-libgcc-file-name 显示编译器伴随库的名称

-print-file-name=<库> 显示 <库> 的完整路径

-print-prog-name=<程序> 显示编译器组件 <程序> 的完整路径

-print-multi-directory 显示不同版本 libgcc 的根目录

-print-multi-lib 显示命令行选项和多个版本库搜索路径间的映射

-print-multi-os-directory 显示操作系统库的相对路径

-Wa,<选项> 将逗号分隔的 <选项> 传递给汇编器

-Wp,<选项> 将逗号分隔的 <选项> 传递给预处理器

-Wl,<选项> 将逗号分隔的 <选项> 传递给链接器

-Xassembler <参数> 将 <参数> 传递给汇编器

-Xpreprocessor <参数> 将 <参数> 传递给预处理器

-Xlinker <参数> 将 <参数> 传递给链接器

-combine 将多个源文件一次性传递给汇编器

-save-temps 不删除中间文件

-pipe 使用管道代替临时文件

-time 为每个子进程计时

-specs=<文件> 用 <文件> 的内容覆盖内建的 specs 文件

-std=<标准> 指定输入源文件遵循的标准

--sysroot=<目录> 将 <目录> 作为头文件和库文件的根目录

-B <目录> 将 <目录> 添加到编译器的搜索路径中

-b <机器> 为 gcc 指定目标机器(如果有安装)

-V <版本> 运行指定版本的 gcc(如果有安装)

-v 显示编译器调用的程序

-### 与 -v 类似,但选项被引号括住,并且不执行命令

-E 仅作预处理,不进行编译、汇编和链接

-S 编译到汇编语言,不进行汇编和链接

-c 编译、汇编到目标代码,不进行链接

-o <文件> 输出到 <文件>

-x <语言> 指定其后输入文件的语言

允许的语言包括:c c++ assembler none

‘none’意味着恢复默认行为,即根据文件的扩展名猜测

源文件的语言

以 -g、-f、-m、-O、-W 或 --param 开头的选项将由 gcc 自动传递给其调用的

不同子进程。若要向这些进程传递其他选项,必须使用 -W<字母> 选项。