Post

4.通用函数

4.通用函数
目录 {{" - [command](#command) - [定义](#%E5%AE%9A%E4%B9%89) - [宏定义](#%E5%AE%8F%E5%AE%9A%E4%B9%89) - [枚举定义](#%E6%9E%9A%E4%B8%BE%E5%AE%9A%E4%B9%89) - [类型定义](#%E7%B1%BB%E5%9E%8B%E5%AE%9A%E4%B9%89) - [输入](#%E8%BE%93%E5%85%A5) - [scanf ()](#scanf-) - [读取字符串](#%E8%AF%BB%E5%8F%96%E5%AD%97%E7%AC%A6%E4%B8%B2) - [gets()](#gets) - [fgets()](#fgets) - [strlen()](#strlen) - [getchar()](#getchar) - [_getch() 输入任意键结束](#_getch--%E8%BE%93%E5%85%A5%E4%BB%BB%E6%84%8F%E9%94%AE%E7%BB%93%E6%9D%9F) - [输出](#%E8%BE%93%E5%87%BA) - [puts()](#puts) - [fputs()](#fputs) - [putchar()](#putchar) - [printf()](#printf) - [流程结构](#%E6%B5%81%E7%A8%8B%E7%BB%93%E6%9E%84) - [switch](#switch) - [杂项](#%E6%9D%82%E9%A1%B9) - [随机数](#%E9%9A%8F%E6%9C%BA%E6%95%B0) - [获取当前时间](#%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E6%97%B6%E9%97%B4) - [延迟](#%E5%BB%B6%E8%BF%9F) - [字符串处理](#%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%A4%84%E7%90%86) - [字符串替换](#%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%9B%BF%E6%8D%A2) - [字符串拷贝 strcpy(dst,scr);](#%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%8B%B7%E8%B4%9D----strcpydstscr) - [字符串追加 strcat(dst,scr);](#%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BF%BD%E5%8A%A0----strcatdstscr) - [字符串比较 strcmp(str1,str2);](#%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%AF%94%E8%BE%83----strcmpstr1str2) - [组拆包](#%E7%BB%84%E6%8B%86%E5%8C%85) - [组包 sprintf(buf,format);](#%E7%BB%84%E5%8C%85----sprintfbufformat) - [拆包 sscanf(buf,"format",&a,&b);](#%E6%8B%86%E5%8C%85-----sscanfbufformatab) - [  函数原型:   int sscanf( string str, string fmt, mixed var1, mixed var2 ... );   int scanf( const char *format [,argument]... );   说明:   sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。   其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}   注:   1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)   2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。   3、width表示读取宽度。   4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。   5、type :这就很多了,就是%s,%d之类。   6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值   支持集合操作:   %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)   %[aB'] 匹配a、B、'中一员,贪婪性   %[^a] 匹配非a的任意字符,贪婪性](#%E5%87%BD%E6%95%B0%E5%8E%9F%E5%9E%8B----%0D%0A%E3%80%80%E3%80%80int-sscanf-string-str-string-fmt-mixed-var1-mixed-var2------%0D%0A%E3%80%80%E3%80%80int-scanf-const-char-format-argument-----%0D%0A%E3%80%80%E3%80%80%E8%AF%B4%E6%98%8E----%0D%0A%E3%80%80%E3%80%80sscanf%E4%B8%8Escanf%E7%B1%BB%E4%BC%BC%E9%83%BD%E6%98%AF%E7%94%A8%E4%BA%8E%E8%BE%93%E5%85%A5%E7%9A%84%E5%8F%AA%E6%98%AF%E5%90%8E%E8%80%85%E4%BB%A5%E5%B1%8F%E5%B9%95stdin%E4%B8%BA%E8%BE%93%E5%85%A5%E6%BA%90%E5%89%8D%E8%80%85%E4%BB%A5%E5%9B%BA%E5%AE%9A%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%BA%E8%BE%93%E5%85%A5%E6%BA%90----%0D%0A%E3%80%80%E3%80%80%E5%85%B6%E4%B8%AD%E7%9A%84format%E5%8F%AF%E4%BB%A5%E6%98%AF%E4%B8%80%E4%B8%AA%E6%88%96%E5%A4%9A%E4%B8%AA-%25-width-h--l--i64--ltype-----%5Ct--%5Cn--%E9%9D%9E%25%E7%AC%A6%E5%8F%B7----%0D%0A%E3%80%80%E3%80%80%E6%B3%A8----%0D%0A%E3%80%80%E3%80%801--%E4%BA%A6%E5%8F%AF%E7%94%A8%E4%BA%8E%E6%A0%BC%E5%BC%8F%E4%B8%AD-%E5%8D%B3-%25d-%E5%92%8C-%25s-%E5%8A%A0%E4%BA%86%E6%98%9F%E5%8F%B7--%E8%A1%A8%E7%A4%BA%E8%B7%B3%E8%BF%87%E6%AD%A4%E6%95%B0%E6%8D%AE%E4%B8%8D%E8%AF%BB%E5%85%A5-%E4%B9%9F%E5%B0%B1%E6%98%AF%E4%B8%8D%E6%8A%8A%E6%AD%A4%E6%95%B0%E6%8D%AE%E8%AF%BB%E5%85%A5%E5%8F%82%E6%95%B0%E4%B8%AD----%0D%0A%E3%80%80%E3%80%802abc%E8%A1%A8%E7%A4%BAabc%E4%B8%AD%E9%80%89%E4%B8%80d%E8%A1%A8%E7%A4%BA%E5%8F%AF%E4%BB%A5%E6%9C%89d%E4%B9%9F%E5%8F%AF%E4%BB%A5%E6%B2%A1%E6%9C%89d----%0D%0A%E3%80%80%E3%80%803width%E8%A1%A8%E7%A4%BA%E8%AF%BB%E5%8F%96%E5%AE%BD%E5%BA%A6----%0D%0A%E3%80%80%E3%80%804h--l--i64--l%E5%8F%82%E6%95%B0%E7%9A%84size%E9%80%9A%E5%B8%B8h%E8%A1%A8%E7%A4%BA%E5%8D%95%E5%AD%97%E8%8A%82sizei%E8%A1%A8%E7%A4%BA2%E5%AD%97%E8%8A%82-sizel%E8%A1%A8%E7%A4%BA4%E5%AD%97%E8%8A%82sizedouble%E4%BE%8B%E5%A4%96l64%E8%A1%A8%E7%A4%BA8%E5%AD%97%E8%8A%82size----%0D%0A%E3%80%80%E3%80%805type-%E8%BF%99%E5%B0%B1%E5%BE%88%E5%A4%9A%E4%BA%86%E5%B0%B1%E6%98%AF%25s%25d%E4%B9%8B%E7%B1%BB----%0D%0A%E3%80%80%E3%80%806%E7%89%B9%E5%88%AB%E7%9A%84%25width-h--l--i64--ltype-%E8%A1%A8%E7%A4%BA%E6%BB%A1%E8%B6%B3%E8%AF%A5%E6%9D%A1%E4%BB%B6%E7%9A%84%E8%A2%AB%E8%BF%87%E6%BB%A4%E6%8E%89%E4%B8%8D%E4%BC%9A%E5%90%91%E7%9B%AE%E6%A0%87%E5%8F%82%E6%95%B0%E4%B8%AD%E5%86%99%E5%85%A5%E5%80%BC----%0D%0A%E3%80%80%E3%80%80%E6%94%AF%E6%8C%81%E9%9B%86%E5%90%88%E6%93%8D%E4%BD%9C----%0D%0A%E3%80%80%E3%80%80%25a-z-%E8%A1%A8%E7%A4%BA%E5%8C%B9%E9%85%8Da%E5%88%B0z%E4%B8%AD%E4%BB%BB%E6%84%8F%E5%AD%97%E7%AC%A6%E8%B4%AA%E5%A9%AA%E6%80%A7%E5%B0%BD%E5%8F%AF%E8%83%BD%E5%A4%9A%E7%9A%84%E5%8C%B9%E9%85%8D----%0D%0A%E3%80%80%E3%80%80%25ab-%E5%8C%B9%E9%85%8Dab%E4%B8%AD%E4%B8%80%E5%91%98%E8%B4%AA%E5%A9%AA%E6%80%A7----%0D%0A%E3%80%80%E3%80%80%25%5Ea-%E5%8C%B9%E9%85%8D%E9%9D%9Ea%E7%9A%84%E4%BB%BB%E6%84%8F%E5%AD%97%E7%AC%A6%E8%B4%AA%E5%A9%AA%E6%80%A7) - [字符串查找](#%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%9F%A5%E6%89%BE) - [strchr(buf,'char'); 在字符串中找一个字符。](#strchrbufchar---%E5%9C%A8%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E6%89%BE%E4%B8%80%E4%B8%AA%E5%AD%97%E7%AC%A6) - [strstr(buf,buf); 在字符串中寻找指定字符串的位置](#strstrbufbuf--%E5%9C%A8%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E5%AF%BB%E6%89%BE%E6%8C%87%E5%AE%9A%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E4%BD%8D%E7%BD%AE) - [失败返回0](#%E5%A4%B1%E8%B4%A5%E8%BF%94%E5%9B%9E0) - [字符串切割 strtok(buf,"注意是双引号" 或 buf);](#%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%88%87%E5%89%B2----strtokbuf%E6%B3%A8%E6%84%8F%E6%98%AF%E5%8F%8C%E5%BC%95%E5%8F%B7--%E6%88%96--buf) - [字符串转数字](#%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BD%AC%E6%95%B0%E5%AD%97) - [内存处理](#%E5%86%85%E5%AD%98%E5%A4%84%E7%90%86) - [malloc(申请空间位数) 申请空间](#malloc%E7%94%B3%E8%AF%B7%E7%A9%BA%E9%97%B4%E4%BD%8D%E6%95%B0--%E7%94%B3%E8%AF%B7%E7%A9%BA%E9%97%B4) - [文件操作](#%E6%96%87%E4%BB%B6%E6%93%8D%E4%BD%9C) - [打开文件](#%E6%89%93%E5%BC%80%E6%96%87%E4%BB%B6) - [打印出错信息](#%E6%89%93%E5%8D%B0%E5%87%BA%E9%94%99%E4%BF%A1%E6%81%AF) - [关闭文件](#%E5%85%B3%E9%97%AD%E6%96%87%E4%BB%B6) - [修改文件](#%E4%BF%AE%E6%94%B9%E6%96%87%E4%BB%B6) - [写入](#%E5%86%99%E5%85%A5) - [组包写入](#%E7%BB%84%E5%8C%85%E5%86%99%E5%85%A5) - [fwrite](#fwrite) - [读取](#%E8%AF%BB%E5%8F%96) - [fread](#fread) - [删除与重命名](#%E5%88%A0%E9%99%A4%E4%B8%8E%E9%87%8D%E5%91%BD%E5%90%8D) - [删除](#%E5%88%A0%E9%99%A4) - [移动 和 重命名](#%E7%A7%BB%E5%8A%A8-%E5%92%8C-%E9%87%8D%E5%91%BD%E5%90%8D) - [判断是否读取完全](#%E5%88%A4%E6%96%AD%E6%98%AF%E5%90%A6%E8%AF%BB%E5%8F%96%E5%AE%8C%E5%85%A8) - [移动文件光标](#%E7%A7%BB%E5%8A%A8%E6%96%87%E4%BB%B6%E5%85%89%E6%A0%87) - [获取文件状态信息 stat](#%E8%8E%B7%E5%8F%96%E6%96%87%E4%BB%B6%E7%8A%B6%E6%80%81%E4%BF%A1%E6%81%AF-stat) " | markdownify }}

command

定义

宏定义

#define 名字 数值或类型 宏定义相当于 纯粹的替换 ,并非真实定义。

枚举定义

enum 对象名 {成员….}; //递增

类型定义

typedef 类型 名字

一个简便的结合 结构体使用方法
typedef struct TIME
{
int sec;
int min;
int hor;

}TIME;
之后就可以用 TIME 进行变量定义。

输入

scanf ()

用来数值等 小数据的读取

scanf(“%d”,&num); // 可通过手动输入 从地址上更改 变量值
能读取 回车
成功返回 参数数目 失败返回-1

读取字符串

scanf(“%s”,&num);

  • 遇到 \0 、空格 就会结束。
  • 会造成内存污染:无视数组可存的大小,存放字符空间不足,会继续向后存放,占用其他的空间。

fscanf(文件流指针, format);
从文件中提取数据到变量地址
成功返回参数数目,失败返回-1

gets()

gets(&num);

  • 遇到空格不结束读取
  • 也会造成内存污染

fgets()

用来字符串的读取

fgets(&num, sizeof(num) ,stdin); // 从 stdin 读取到 num 数组中 ,最大可读取sizeof(num)-1 个//-1 是因为 会在后面自动添加一个 '\0'

  • 成功返回字符串,失败返回NULL
  • 会读取 空格 和 \n ,读取后直接结束。·
  • 不会污染内存
  • 使用时配合strlen() 可避免读取 回车
    • char buf[1024]=””;
    • fgets(buf,sizeof(buf),stdin);
    • buf[strlen(buf)-1]=0;

strlen()

测字符数组有效字符(除\0外的字符)的个数

1
2
3
4
char buf[]="hello";  
int i = 0 ;  
i = strlen(buf);  
  

getchar()

与scanf 类似
作用:从键盘读取一个字符
ch=getchar();
printf(“%c\n”,ch);

_getch() 输入任意键结束

返回 获取的字符

头文件

输出

puts()

puts(buf)//数组首元素地址
自动换行

fputs()

fputs(buf,stdout); // 数组首元素地址;stdout 标准输出(屏幕)

putchar()

输出打印一个字符
putchar(‘a’)’

printf()

printf格式字符:

打印格式对应数据类型含义
%dint接受整数值并将它表示为有符号的十进制整数
%hdshort int短整数
%huunsigned short无符号短整数
%ounsigned int无符号8进制整数
%uunsigned int无符号10进制整数
%x,%Xunsigned int无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF
%ffloat单精度浮点数
%lfdouble双精度浮点数
%e,%Edouble科学计数法表示的数,此处”e”的大小写代表在输出时用的”e”的大小写
%cchar字符型。可以把输入的数字按照ASCII码相应转换为对应的字符
%schar *字符串。输出字符串中的字符直至字符串中的空字符(字符串以’\0‘结尾,这个’\0’即空字符)
%pvoid *以16进制形式输出指针
%%%输出一个百分号

printf附加格式:

字符含义
l(字母l)附加在d,u,x,o前面,表示长整数
-左对齐
m(代表一个整数)数据最小宽度
0(数字0)将输出的前面补上0直到占满指定列宽为止不可以搭配使用-
m.n(代表一个整数)m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度,用于说明输出的实型数的小数位数。对数值型的来说,未指定n时,隐含的精度为n=6位。

流程结构

switch

  • 在 判断条件为 整数、字符 的情况下适用
  • 在没有使用 break 情况下 ,只会跳到对应case,并依次执行完 下面的所有case
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    switch(a)//(里面的判断雕件只能是整数)  
    {  
      case 0: //不需要用大括号括起来  
          printf("0\n");  
          printf("hello\n");  
          break;//  跳出 switch语句   
      case 1:  
          printf("1\n");  
          break;//  跳出 switch语句   
      case 2:  
          printf("2\n");  
          break;//  跳出 switch语句   
      case 3:  
          printf("3\n");  
          break;//  跳出 switch语句   
      default:  
          printf("4\n"); //默认  
          break;//  跳出 switch语句   
    }  
    

    另一种情况
    判断字符时可以直接使用
    因为字符在内存中存的是 ASCII值 ,可视为整数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    int main()  
    {  
    char c;  
    c=getchar();  
    switch(c)//(里面的判断雕件只能是整数)  
    {  
      case '0': //不需要用大括号括起来  
          printf("0\n");  
          printf("hello\n");  
          break;//  跳出 switch语句   
      case '1':  
          printf("1\n");  
          break;//  跳出 switch语句   
      case '2':  
          printf("2\n");  
          break;//  跳出 switch语句   
      case '3':  
          printf("3\n");  
          break;//  跳出 switch语句   
      default:  
          printf("4\n"); //默认  
          break;//  跳出 switch语句   
    }  
    }  
    

杂项

随机数

1
2
3
4
5
<stdlib.h>  

srand(10);  //设置种子  

rand();//获得随机数  

获取当前时间

time(NULL);

延迟

Sleep(2);

头文件

字符串处理

字符串替换

字符串拷贝 strcpy(dst,scr);


strcpy(dst,scr); 拷贝字符串,遇到\0结束

  • 返回dest起始地址
    • strncpy(dst,scr,n); 拷贝n个字符,遇到\0结束,不拷贝\0之后。

字符串追加 strcat(dst,scr);


strcat(dst,scr); 追加字符串,从dst的\0位置替换追加。

  • 返回dest起始地址
    • strncat(dst,scr); 追加n个字符,遇到\0结束,不会读取\0后。

字符串比较 strcmp(str1,str2);


strcmp(str1,str2); 比较字符串,遇到\0结束

  • 相等返回 0;大于返回 >0;小于返回 <0;
    • strncmp(str1,str2,n); 比较指定个数的字符串,遇\0结束。

组拆包

组包 sprintf(buf,format);


sprintf(buf,format); 组包函数,format 格式等同于 printf 中的参数。

  • 返回值为 buf的长度,不包括最后的0可以测量字符串中间的\0
    • snprintf // sprintf 有缓冲溢出问题,可以使用sprintf 来替代。

拆包 sscanf(buf,”format”,&a,&b);


sscanf(buf,”format”,&a,&b); 拆包函数,format 格式等同于 buf 中的格式,将想要的内容提取到 a , b 中。

  • 返回值为参数数目
    • sscanf() - 从一个字符串中读进与指定格式相符的数据.
        函数原型:
        int sscanf( string str, string fmt, mixed var1, mixed var2 … );
        int scanf( const char format [,argument]… );
        说明:
        sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
        其中的format可以是一个或多个 {%[
      ] [width] [{h | l | I64 | L}]type | ‘ ‘ | ‘\t’ | ‘\n’ | 非%符号}
        注:
        1、 * 亦可用于格式中, (即 %d 和 %s) 加了星号 () 表示跳过此数据不读入. (也就是不把此数据读入参数中)
        2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
        3、width表示读取宽度。
        4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
        5、type :这就很多了,就是%s,%d之类。
        6、特别的:%
      [width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
        支持集合操作:
        %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
        %[aB’] 匹配a、B、’中一员,贪婪性
        %[^a] 匹配非a的任意字符,贪婪性

        

字符串查找


strchr(buf,’char’); 在字符串中找一个字符。

  • 返回值为 在该字符串中找到的第一个指定字符的地址
    失败返回0

strstr(buf,buf); 在字符串中寻找指定字符串的位置

  • 返回指定字符串第一次出现的地址
    失败返回0

字符串切割 strtok(buf,”注意是双引号” 或 buf);


strtok(buf,”注意是双引号” 或 buf); 切割字符串,将替换成 \0 字符。

  • 双引号里的 不是指 切割一次,而且一次性切割所有相邻、相关字符。
  • notice 原先字符串 中的分隔符 将被替换成 \0;

  • 返回值为 上一次分割的字符串指针,分割结束返回 NULL
    • 第一次分割时,必须给 buf 值。
    • 之后分割,strtok(NULL,””); 将buf设置成NULL,会自动记录分割位置,并往后进行分割。
    • 切割结束返回 NULL

字符串转数字

  • 跳过空格,遇到数字或正负号开始转换,遇到非数字或’\0’ 结束转换,返回结果。
    • atoi(); int
    • atol(); long
    • atof(); float

内存处理

优点: 遇到 \0 和 0 不会结束操作。

  • memcpy(*dest,*scr,num); 从 scr地址拷贝 num个 字节 到 dest地址;
    • 返回 dest 首地址
  • memcmp(*dest,*scr,num); 比较 dest 地址和 scr 地址的n个字符
    • 相同返回 0,大于返回1,小于返回-1;
  • memset(*dest,const char,num); 在 dest地址处 插入 num个 char 字符;————char 字符若为 int 类型 ,必须是 unsigned char.
    • 返回 dest 首地址

malloc(申请空间位数) 申请空间

free(申请过的空间首地址) 释放空间

文件操作

打开文件

  • fopen(”路径名“,”打开方式“); // 打开一个文件,
  • 成功返回FILE结构体地址,失败返回NULL
  • fopen(“./a.txt”,”r”);
    • 打开方式
      • r只读
      • w只写 清空文件
      • r+可读可写
      • w+可读可写清空文件
      • a追加
      • a+在文件末尾更改文件
      • b 二进制文件 + b
    • w清空文件
    • 只有r不会创建文件

打印出错信息

  • perror(“前缀”);
  • 配合文件流指针使用
    • 1
      2
      3
      4
      5
      
         if(NULL == fp) // 或者 if(!fp);    fp 为文件流指针    
         {    
         perror("open");    
         return;    
        }    
      

关闭文件

一个程序最多打开1024个文件
fclose(文件结构体指针);

修改文件

写入

  • fputc(char,文件流指针); 一个字符一个字符得写
  • 成功返回写入字符,失败 -1 ——EOF
组包写入

fprintf(文件流,format);
失败返回-1 成功返回 字符数

fwrite
  • fwrite(写入的指针,数据块大小,块数,文件流指针);
  • 成功返回块数
  • 技巧,
      1. 将数据块大小填1,块数等于 写入数据字节数

读取

  • fgetc(文件流指针) 获取一个文件中一个字符
    • 成功返回读取的字符,失败-1 ——EOF
  • fscanf(文件流指针,format 格式);
  • 成功返回参数数目,失败返回-1
  • 提取文件中的数据到变量地址中
fread
  • fread(写入的指针,数据块大小,块数,文件流指针);
  • 成功返回块数
  • 技巧,
      1. 当返回值比块数小,说明读到文件末尾

删除与重命名

删除

remove(“路径名”);
成功0,失败-1

移动 和 重命名

rename(“旧路径名”,“新路径名”)
成功0,失败-1

判断是否读取完全

  • feof(文件流指针); 既可以判断 二进制文件 也可以判断 文本文件。
  • 返回值 没有读取完 0 ,读取完全非0
  • 判断的是 最后一次读取文件的内容

移动文件光标

fseek(文件流指针,偏移位,模式);
* 偏移位:相对位置 ,通过正负 前移或后移
* 模式:SEEK_SET 头
* SEEK_CUR 当前
* SEEK_END 尾

rewind(文件流指针);
* 移动到开头

ftell(文件流指针);
* 返回当前相对开头的偏移值

获取文件状态信息 stat

stat(“文件目录”,stat结构体地址)
* stat 结构体地址
* struct stat buf;
* stat(“t.txt”,&buf);
* 成功返回0,失败返回 -1
* 可判断文件是否存在

stat_size 取文件大小 - > t.st_size.

This post is licensed under CC BY 4.0 by the author.