题目:
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); } }