知識點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);
}