嵌入式-标准IO

题目:

1.查一查realloc()的使用方法

2. 尝试用fread()去实现fgetc()函数和fgets()()函数

3. 尝试用fwrite()去实现fputc()函数和fputs()函数

1.查一查realloc()的使用方法

realloc()函数
功能重新分配先前通过 malloc() 或 calloc() 申请的内存块的大小
声明
void *realloc(void *ptr, size_t size)
参数
  • ptr -- 指针指向一个要重新分配内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果为空指针,则会分配一个新的内存块,且函数返回一个指向它的指针。
  • size -- 内存块的新的大小,以字节为单位。如果大小为 0,且 ptr 指向一个已存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针
返回值

该函数返回一个指针 ,指向重新分配大小的内存。如果请求失败,则返回 NULL。

以下是一个remalloc()的简单示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
   char *str;
 
   /* 最初的内存分配 */
   str = (char *) malloc(15);
   strcpy(str, "nhooo");
   printf("str = %s,  地址 = %p\n", str, str);
 
   /* 重新分配内存 */
   str = (char *) realloc(str, 25);
   strcat(str, ".com");
   printf("str = %s,  地址 = %p\n", str, str);
 
   free(str);
   
   return(0);
}

2. 尝试用fread()去实现fgetc()函数和fgets()函数

 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 
 //获取一个字符
 void my_fgetc(FILE *fp);
 //获取一行
 void my_fgets(FILE *fp);


 int main(int argc, const char *argv[])
 {
 //fread()-->fgetc()获取一个字符串
     FILE *fp = fopen("./1.txt","r");
 
     my_fgetc(fp);
 
 
 //fread()--->fgets()获取一行
     my_fgets(fp);
 

     fclose(fp);

 
     return 0;
 }
void my_fgetc(FILE *fp)
{
// fread()--->fgetc()获取一个字符
    char *buf = malloc(1);
    size_t ret = fread(buf,1,1,fp);
    if(1==ret)
    {
        printf("读取字符串成功:fgetc=%s\n",buf);
    }
    else{
        printf("读取失败\n");
    }

//  fclose(fp);


}

void my_fgets(FILE *fp)
{
//fread()--->fgets()获取一行
    char *buf = malloc(1);
    while(1)
    {
        fread(buf,1,1,fp);//文件指针

        printf("gets=%s\n",buf);

        if(strcmp(buf,"\n") == 0)
        {

            break;
        }
    }
    fclose(fp);


}

3. 尝试用fwrite()去实现fputc()函数和fputs()函数

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


//写一个字符
void fwirte_fgetc(char *buf,FILE *fp1);

//写一行
void fwirte_fgets(char *str,FILE *fp1);


int main(int argc, const char *argv[])
{

    //fwirte()--->fgetc()
    FILE *fp1 = fopen("./2.txt","w");

    fwirte_fgetc("H",fp1);
    fwirte_fgetc("e",fp1);
    fwirte_fgetc("l",fp1);

    fwirte_fgetc("l",fp1);
    fwirte_fgetc("o",fp1);



//fwirte()--->fgets()

    fwirte_fgets("world",fp1);


    fclose(fp);
    fclose(fp1);

    return 0;                                                               
}


//写入一个字符
void fwirte_fgetc(char *buf,FILE *fp1)
{

    size_t ret = fwrite(buf,sizeof(char),1,fp1);
    if(1==ret)
    {
        printf("写入字符串成功:fgetc=%s\n",buf);
    }                                                              
    else{
        printf("写入失败\n");
    }

}

//写入一行字符串
void fwirte_fgets(char *str,FILE *fp1)
{
    size_t len =0;
    char *buf = str;
    while(*buf != '\0')
    {
        len++;
        buf++;
    }
    size_t result = fwrite(str,sizeof(char),len,fp1);
    if(result == len)
    {
        printf("fgets=%s字符串写入成功\n",str);
    }

}
                                                                   
                                                                   
                                                                   

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值