一.柔性数组
int n = 5;
int m = 10;
int* p1, * p2, * p3;
p2 = (int*)malloc(sizeof(int) * n);
if (nullptr == p2)exit(EXIT_FAILURE);
for (int i = 0; i < n;i++)
{
p2[i] = i + 10;
}
int* newdata = (int*)realloc(p2, sizeof(int) * m);
if (newdata == nullptr)
{
printf("mem out of\n");
exit(EXIT_FAILURE);
}
p2 = newdata;
return 0;
安全写法
二.文件
1.数据的输入就是从“源端”获取数据,输出是想“终端”写入数据。源端可以是键盘,鼠标,硬盘,光盘,扫描仪等输入设备,终端可以是显示器,打印机等输出设备。在C语言中,把这些输入和输出设备也看作是“文件”
2.FILE:对象类型,足以保有控制I/O流所需的全部信息。
3.文件可分为文本文件和二进制文件
4.文件操作步骤:1)打开文件,2)读写文件,3)关闭文件
打开文件函数原型:
FILE* fopen(const char* filename, const char* mode);
文件名:可以是相对路径 打开文件的方式
,也可以是绝对路径
模式 | 含义 | 说明 |
---|---|---|
“r” | 只读 | 文件必须存在,否则打开失败 |
“w" | 只写 | 若文件存在,则清除源文件后写入;否则,创建新文件后写入 |
“a” | 末尾只写 | 若文件存在,则位置指针移到文件末尾,在文件尾部写入数据,该方式不删除原文件数据;若文件不存在,在创建新文件后写入。 |
“r+” | 读写 | 文件必须存在,否则打开失败。在只读r的基础上加’+‘表示增加可写的功能。 |
“w+” | 读写 | 创建新文件,先向该文件中写入数据,然后可从该文件中读取数据 |
“a+” | 读写 | 在’a’模式的基础上,增加可读功能 |
“rb” | 二进制文件只读 | 功能同模式“r",b表示以二进制模式打开 |
“wb” | 二进制文件只写 | 功能同模式”w".二进制模式 |
“ab” | 二进制文件末尾只写 | 功能同模式“a".二进制模式 |
“rb+” | 二进制文件读写 | 功能同模式”r+"。二进制模式 |
“wb+” | 二进制文件读写 | 功能同模式“w+"。二进制模式 |
5.格式化写入函数:
int fprintf(FILE*stream,const char *format...);
输出函数:
int printf(const char *format,...);
6.
int SaveData()//保存数据写文件
{
int ar[] = { 12,23,34,45,56,67,78,89,100 };
int n = sizeof(ar) / sizeof(ar[0]);
FILE* fp = nullptr;
//fp = fopen("zjh.txt", "w");
errno_t res = fopen_s(&fp, "yhp.txt", "w");
if (fp == nullptr)
{
printf("fopen file error \n");
return 1;
}
for (int i = 0; i < n; i++)
{
printf("%d", ar[i]);//直接写在屏幕上
fprintf(fp, "%d", ar[i]);
//ar[i]在fp缓冲区中,并没有直接写入与fp相关联的文件中
}
fclose(fp);
//把缓冲区的文件回写入文件中,此时fp为失效指针
fp = nullptr;
}
7.
int LoadData()//加载数据读文件
{
int ar[10];
FILE* fp = nullptr;
//fp = fopen("zjh.txt", "w");
errno_t res = fopen_s(&fp, "yhp.txt", "r");
if (fp == nullptr)
{
printf("fopen file error \n");
return 1;
}
for (int i = 0; i < 10; i++)
{
//scanf("%d %d", &a, &b);//从输入设备读取数据
//sscanf(buff, "%d", &a);//从缓冲区读取数据
fscanf(fp, "%d", &a);//从文件读取数据
}
fclose(fp);
//把缓冲区的文件回写入文件中,此时fp为失效指针
fp = nullptr;
}