c fseek ,fwrite ,fread,malloc函数

统计一行字符串中的单词个数

int fun(char *s)//传入一行字符串
{
    int i,j=0;
    for(i=0;s[i]!='\0';i++)//到结束符跳出循环
        if(s[i]!=' '&&(s[i+1]==' '||s[i+1]=='\0'))/*当前字符是非空格字符,且下一个字符是空格或空字符*/
            j++;//单词个数加一
    return j;//返回单词个数
}

创建带头结点的单向链表,并为各节点数据域赋0到m-1的值

typedef  struct  aa
{  int  data;
   struct  aa  *next;
} NODE;//结构体
NODE *Creatlink(int  n, int  m)//n节点数,m数据域范围
{  NODE  *h=NULL, *p, *s;//h赋空值
   int  i;
   p=(NODE *)malloc(sizeof(NODE));
   h=p;//h为头节点
   p->next=NULL;
   for(i=1; i<=n; i++)
   {  s=(NODE *)malloc(sizeof(NODE));//分配一个新的节点
      s->data=rand()%m; //数据域赋值
      s->next=p->next;//
      p->next=s;      //  将新节点连接到p节点   
      p=p->next;//p始终指向最后一个节点
   }
   return  h;//返回头结点
}

malloc函数

void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。

malloc函数是一种分配长度为num_bytes字节的内存块的函数,可以向系统申请分配指定size个字节的内存空间。malloc是动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以通过类型转换强制转换为任何其它类型的指针

void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由

  • typedef struct  student {
      long  sno;
      char  name[10];
      float  score[3];
    } STU;
    void fun(char  *filename, STU  n)
    { FILE  *fp;
      fp = fopen(filename, "rb+");
      fseek(fp, -(long)sizeof(STU), SEEK_END);
      fwrite(&n, sizeof(STU), 1, fp);
      fclose(fp);
    }
    void main()
    { STU  t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88},
                 {10003,"LiSi", 85, 70, 78},    {10004,"FangFang", 90, 82, 87},
                 {10005,"ZhangSan", 95, 80, 88}};
      STU  n={10006,"ZhaoSi", 55, 70, 68}, ss[N];
     ..
         fread(ss, sizeof(STU), N, fp);
     ..
    }
  1. fseek函数

    功 能: 重定位流上的文件指针 描 述: 函数设置文件指针fp的位置。如果执行成功,fp将指向以SEEK_END为基准,偏移-(long)sizeof(STU)个字 节的位置。如果执行失败(比如sizeof超过文件自身大小),则不改变fp指向的位置。 返回值: 成功,返回0,否则返回其他值。 第一个参数fp为文件指针 第二个参数-(long)sizeof(STU)为偏移量,整数表示正向偏移,负数表示负向偏移 第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET SEEK_SET: 文件开头 SEEK_CUR: 当前位置 SEEK_END: 文件结尾 其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.

    例如:

    fseek(fp,100L,0);把fp指针移动到离文件开头100字节处; fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处; fseek(fp,-100L,2);把fp指针退回到离文件结尾100字节处;

  2. fwrite函数

  3. 在文件处理中,通过fwrite()函数,我们将大小为长度的对象的计数写入名为缓冲区的数组的输入流文件名中。 它返回将写入文件的对象数。 如果要写入的对象数量较少或遇到EOF ,则它将引发错误。

  4. fwrite(&n, sizeof(STU), 1, fp);

    第一个参数:一个指针,要输出的数据的地址

    第二个参数:要写入的字节数

    第三个参数:要进行写入size字节的数据项的个数

    第四个参数:目标文件指针。

  5. fread函数

    size_t fread ( void *buffer, size_t size, size_t count, FILE *stream);

    fread是一个函数,它从文件流中读数据,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。 例:fread(ss, sizeof(STU), N, fp); 参 数 第一个参数 :用于接收数据的内存地址 第二个参数 :要读的每个数据项的字节数,单位是字节 第三个参数 :要读N个数据项,每个数据项sizeof(STU)个字节. 第四个参数: 输入流 返回值 返回真实读取的项数,若大于count则意味着产生了错误。另外,产生错误后,文件位置指示器是无法确定的。若其他stream或buffer为空指针,或在unicode模式中写入的字节数为奇数,此函数设置errno为EINVAL以及返回0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_61156831

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值