C语言教程 第16页 C 库函数 – clearerr() C 标准库 – <stdio.h> 描述 C 库函数 void clearerr(FILE *stream) 清除给定流 stream 的文件结束和错误标识符。 声明 下面是 clearerr() 函数的声明。 void clearerr(FILE *stream) 参数 stream — 这是指向 FILE 对象的指针,该 FILE 对象标识了流。 返回值 这不会失败,且不会设置外部变量 errno,但是如果它检测到它的参数不是一个有效的流,则返回 -1,并设置 errno 为 EBADF。 实例 下面的实例演示了 clearerr() 函数的用法。 #include <stdio.h> int main() { FILE *fp; char c; fp = fopen("file.txt", "w"); c = fgetc(fp); if( ferror(fp) ) { printf("读取文件:file.txt 时发生错误\n"); } clearerr(fp); if( ferror(fp) ) { printf("读取文件:file.txt 时发生错误\n"); } fclose(fp); return(0); } 假设我们有一个文本文件 file.txt,它是一个空文件。让我们编译并运行上面的程序,因为我们试图读取一个以只写模式打开的文件,这将产生以下结果。 读取文件:file.txt 时发生错误 C 标准库 – <stdio.h>
2024-04-03
C 库函数 – ftell() C 标准库 – <stdio.h> 描述 C 库函数 long int ftell(FILE *stream) 返回给定流 stream 的当前文件位置。 声明 下面是 ftell() 函数的声明。 long int ftell(FILE *stream) 参数 stream — 这是指向 FILE 对象的指针,该 FILE 对象标识了流。 返回值 该函数返回位置标识符的当前值。如果发生错误,则返回 -1L,全局变量 errno 被设置为一个正值。 实例 下面的实例演示了 ftell() 函数的用法。 #include <stdio.h> int main () { FILE *fp; int len; fp = fopen("file.txt", "r"); if( fp == NULL ) { perror ("打开文件错误"); return(-1); } fseek(fp, 0, SEEK_END); len = ftell(fp); fclose(fp); printf("file.txt 的总大小 = %d 字节\n", len); return(0); } 假设我们有一个文本文件 file.txt,它的内容如下: This is w3cschool.cn 让我们编译并运行上面的程序,如果文件内容如上所示,这将产生以下结果,否则会根据文件内容给出不同的结果: file.txt 的总大小 = 21 字节 C 标准库 – <stdio.h>
2024-04-03
C 库函数 – printf() C 标准库 – <stdio.h> 描述 C 库函数 int printf(const char *format, …) 发送格式化输出到标准输出 stdout。 声明 下面是 printf() 函数的声明。 int printf(const char *format, ...) 参数 format — 这是字符串,包含了要被写入到标准输出 stdout 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性是 %[flags][width][.precision][length]specifier,具体讲解如下: specifier(说明符) 输出 c 字符 d 或 i 有符号十进制整数 e 使用 e 字符的科学科学记数法(尾数和指数) E 使用 E 字符的科学科学记数法(尾数和指数) f 十进制浮点数 g 自动选择 %e 或 %f 中合适的表示法 G 自动选择 %E 或 %f 中合适的表示法 o 有符号八进制 s 字符的字符串 u 无符号十进制整数 x 无符号十六进制整数 X 无符号十六进制整数(大写字母) p 指针地址 n 无输出 % 字符 flags(标识) 描述 – 在给定的字段宽度内左对齐,默认是右对齐(参见 width 子说明符)。 + 强制在结果之前显示加号或减号(+ 或 -),即正数前面会显示 + 号。默认情况下,只有负数前面会显示一个 – 号。 (space) 如果没有写入任何符号,则在该值前面插入一个空格。 # 与 o、x 或 X 说明符一起使用时,非零值前面会分别显示 0、0x 或 0X。 与 e、E 和 f 一起使用时,会强制输出包含一个小数点,即使后边没有数字时也会显示小数点。默认情况下,如果后边没有数字时候,不会显示显示小数点。 与 g 或 G 一起使用时,结果与使用 e...
2024-04-03
C 库函数 – feof() C 标准库 – <stdio.h> 描述 C 库函数 int feof(FILE *stream) 测试给定流 stream 的文件结束标识符。 声明 下面是 feof() 函数的声明。 int feof(FILE *stream) 参数 stream — 这是指向 FILE 对象的指针,该 FILE 对象标识了流。 返回值 当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。 实例 下面的实例演示了 feof() 函数的用法。 #include <stdio.h> int main () { FILE *fp; int c; fp = fopen("file.txt","r"); if(fp == NULL) { perror("打开文件时发生错误"); return(-1); } while(1) { c = fgetc(fp); if( feof(fp) ) { break ; } printf("%c", c); } fclose(fp); return(0); } 假设我们有一个文本文件 file.txt,它的内容如下所示。该文件将作为我们实例程序中的一个输入使用: 这里是 w3cschool.cn 让我们编译并运行上面的程序,这将产生以下结果: 这里是 w3cschool.cn C 标准库 – <stdio.h>
2024-04-03
C 库函数 – fwrite() C 标准库 – <stdio.h> 描述 C 库函数 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) 把 ptr 所指向的数组中的数据写入到给定流 stream 中。 声明 下面是 fwrite() 函数的声明。 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) 参数 ptr — 这是指向要被写入的元素数组的指针。 size — 这是要被写入的每个元素的大小,以字节为单位。 nmemb — 这是元素的个数,每个元素的大小为 size 字节。 stream — 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。 返回值 如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象时一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。 实例 下面的实例演示了 fwrite() 函数的用法。 #include<stdio.h> int main () { FILE *fp; char str[] = "This is w3cschool.cn"; fp = fopen( "file.txt" , "w" ); fwrite(str , 1 , sizeof(str) , fp ); fclose(fp); return(0); } 让我们编译并运行上面的程序,这将创建一个文件 file.txt,它的内容如下: This is w3cschool.cn 现在让我们使用下面的程序查看上面文件的内容: #include <stdio.h> int main () { FILE *fp; int c; fp = fopen("file.txt","r"); while(1)...
2024-04-03
C 库函数 – sprintf() C 标准库 – <stdio.h> 描述 C 库函数 int sprintf(char *str, const char *format, …) 发送格式化输出到 str 所指向的字符串。 声明 下面是 sprintf() 函数的声明。 int sprintf(char *str, const char *format, ...) 参数 str — 这是指向一个字符数组的指针,该数组存储了 C 字符串。 format — 这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性是 %[flags][width][.precision][length]specifier,具体讲解如下: specifier(说明符) 输出 c 字符 d 或 i 有符号十进制整数 e 使用 e 字符的科学科学记数法(尾数和指数) E 使用 E 字符的科学科学记数法(尾数和指数) f 十进制浮点数 g 自动选择 %e 或 %f 中合适的表示法 G 自动选择 %E 或 %f 中合适的表示法 o 有符号八进制 s 字符的字符串 u 无符号十进制整数 x 无符号十六进制整数 X 无符号十六进制整数(大写字母) p 指针地址 n 无输出 % 字符 flags(标识) 描述 – 在给定的字段宽度内左对齐,默认是右对齐(参见 width 子说明符)。 + 强制在结果之前显示加号或减号(+ 或 -),即正数前面会显示 + 号。默认情况下,只有负数前面会显示一个 – 号。 (space) 如果没有写入任何符号,则在该值前面插入一个空格。 # 与 o、x 或 X 说明符一起使用时,非零值前面会分别显示 0、0x 或 0X。 与...
2024-04-03
C 库函数 – ferror() C 标准库 – <stdio.h> 描述 C 库函数 int ferror(FILE *stream) 测试给定流 stream 的错误标识符。 声明 下面是 ferror() 函数的声明。 int ferror(FILE *stream) 参数 stream — 这是指向 FILE 对象的指针,该 FILE 对象标识了流。 返回值 如果设置了与流关联的错误标识符,该函数返回一个非零值,否则返回一个零值。 实例 下面的实例演示了 ferror() 函数的用法。 #include <stdio.h> int main() { FILE *fp; char c; fp = fopen("file.txt", "w"); c = fgetc(fp); if( ferror(fp) ) { printf("读取文件:file.txt 时发生错误\n"); } clearerr(fp); if( ferror(fp) ) { printf("读取文件:file.txt 时发生错误\n"); } fclose(fp); return(0); } 假设我们有一个文本文件 file.txt,它是一个空文件。让我们编译并运行上面的程序,因为我们试图读取一个以只写模式打开的文件,这将产生以下结果。 读取文件:file.txt 时发生错误 C 标准库 – <stdio.h>
2024-04-03
C 库宏 – offsetof() C 标准库 – <stddef.h> 描述 C 库宏 offsetof(type, member-designator) 会生成一个类型为 size_t 的整型常量,它是一个结构成员相对于结构开头的字节偏移量。成员是由 member-designator 给定的,结构的名称是在 type 中给定的。 声明 下面是 offsetof() 宏的声明。 offsetof(type, member-designator) 参数 type — 这是一个 class 类型,其中,member-designator 是一个有效的成员指示器。 member-designator — 这是一个 class 类型的成员指示器。 返回值 该宏返回类型为 size_t 的值,表示 type 中成员的偏移量。 实例 下面的实例演示了 offsetof() 宏的用法。 #include <stddef.h> #include <stdio.h> struct address { char name[50]; char street[50]; int phone; }; int main() { printf("address 结构中的 name 偏移 = %d 字节。\n", offsetof(struct address, name)); printf("address 结构中的 street 偏移 = %d 字节。\n", offsetof(struct address, street)); printf("address 结构中的 phone 偏移 = %d 字节。\n", offsetof(struct address, phone)); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: address 结构中的 name 偏移 = 0 字节。 address 结构中的 street 偏移 = 50 字节。 address 结构中的 phone 偏移 = 100 字节。 C...
2024-04-03
C 库函数 – fseek() C 标准库 – <stdio.h> 描述 C 库函数 int fseek(FILE *stream, long int offset, int whence) 设置流 stream 的文件位置为给定的偏移 offset,参数 offset 意味着从给定的 whence 位置查找的字节数。 声明 下面是 fseek() 函数的声明。 int fseek(FILE *stream, long int offset, int whence) 参数 stream — 这是指向 FILE 对象的指针,该 FILE 对象标识了流。 offset — 这是相对 whence 的偏移量,以字节为单位。 whence — 这是表示开始添加偏移 offset 的位置。它一般指定为下列常量之一: 常量 描述 SEEK_SET 文件的开头 SEEK_CUR 文件指针的当前位置 SEEK_END 文件的末尾 返回值 如果成功,则该函数返回零,否则返回非零值。 实例 下面的实例演示了 fseek() 函数的用法。 #include <stdio.h> int main () { FILE *fp; fp = fopen("file.txt","w+"); fputs("This is w3cschool.cn", fp); fseek( fp, 7, SEEK_SET ); fputs(" C Programming Langauge", fp); fclose(fp); return(0); } 让我们编译并运行上面的程序,这将创建文件 file.txt,它的内容如下。最初程序创建文件和写入 This is w3cschool.cn,但是之后我们在第七个位置重置了写指针,并使用 puts() 语句来重写文件,内容如下: This is C Programming Langauge 现在让我们使用下面的程序查看上面文件的内容: #include <stdio.h> int main () { FILE *fp;...
2024-04-03
C 库函数 – tmpnam() C 标准库 – <stdio.h> 描述 C 库函数 char *tmpnam(char *str) 生成并返回一个有效的临时文件名,该文件名之前是不存在的。如果 str 为空,则只会返回临时文件名。 声明 下面是 tmpnam() 函数的声明。 char *tmpnam(char *str) 参数 str — 这是一个指向字符数组的指针,其中,临时文件名将被存储为 C 字符串。 返回值 一个指向 C 字符串的指针,该字符串存储了临时文件名。如果 str 是一个空指针,则该指针指向一个内部缓冲区,缓冲区在下一次调用函数时被覆盖。 如果 str 不是一个空指针,则返回 str。如果函数未能成功创建可用的文件名,则返回一个空指针。 实例 下面的实例演示了 tmpnam() 函数的用法。 #include <stdio.h> int main() { char buffer[L_tmpnam]; char *ptr; tmpnam(buffer); printf("临时名称 1: %s\n", buffer); ptr = tmpnam(NULL); printf("临时名称 2: %s\n", ptr); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: 临时名称 1: /tmp/filebaalTb 临时名称 2: /tmp/filedCIbb0 C 标准库 – <stdio.h>
2024-04-03