DAY22 文件操作

知識點1【深拷貝】0-1在這裏插入圖片描述

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

typedef struct

{

	int num;

	char *name;

}DATA;

void test01()

{

	DATA data1;

	DATA data2;


	data1.num = 100;

	data1.name = (char *)calloc(1,12);

	strcpy(data1.name, "my data");


	data2.num = data1.num;

	//爲結構體變量 申請 獨立的空間

	data2.name = (char *)calloc(1,12);

	strcpy(data2.name, data1.name);


	printf("data1:num = %d, name=%s\n", data1.num, data1.name);

	printf("data2:num = %d, name=%s\n", data2.num, data2.name);


	if(data1.name != NULL)

	{

		free(data1.name);

		data1.name = NULL;

	}


	if(data2.name != NULL)

	{

		free(data2.name);

		data2.name = NULL;

	}



}

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

{

	test01();

	return 0;

}

運行結果
在這裏插入圖片描述總結:前提就是指針變量 作爲 結構體的成員
淺拷貝:兩個結構體變量 中的 指針成員 指向 同一塊堆區空間。
深拷貝:兩個結構體變量 中的 指針成員 指向 各自的堆區空間。
知識點2【文件】
在這裏插入圖片描述

//從文件中讀取內容並輸出到終端
#include <stdio.h>
#include <string.h>

extern void test01();
extern void test02();
int main (int argc,char *argv[])
{
	test02();
	return 0;
}

//字符的讀寫
void test01()
{
	FILE *fp1=NULL;
	FILE *fp2=NULL;
	char *path1="a.txt";
	char *path2="b.txt";

	//打開文件
	fp1=fopen(path1,"r");
	if(NULL==fp1)
	{
		perror("fopen");
		return ;
	}
	
	fp2=fopen(path2,"w");
	if(NULL==fp2)
	{
		perror("fopen");
		return ;
	}
	
	//讀寫操作
	while(1)
	{
		char ch;
		ch=fgetc(fp1);
		if(ch==EOF)
			break;
		fputc(ch,fp2);
	}

	//關閉文件
	fclose(fp1);
	fclose(fp2);

}

//字符串的讀寫
void test02()
{
	FILE *fp1=NULL;
	FILE *fp2=NULL;
	char *path1="c.txt";
	char *path2="d.txt";
	//打開兩個文件讓我康康
	fp1=fopen(path1,"r");
	if(NULL==fp1)
	{
		perror("fopen");	
		return;
	}
	fp2=fopen(path2,"w");
	if(NULL==fp2)
	{
		perror("fopen");
		return;
	}

	//讀寫操作呀
	while(1)
	{
		char str[128]="";
		char *ch=NULL;
		int n=sizeof(str)/sizeof(str[0]);
		ch=fgets(str,n,fp1);
		if(NULL==ch)//返回爲空,怎退出(不是EOF)!!!
			break;
	//	printf("%s",ch);
		fputs(ch,fp2);

	}

	//兄弟,關掉文件
	fclose(fp1);
	fclose(fp2);
	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章