读取file1的内容以行为单位倒置输出到file2中

/*
功能:读取文件file1.txt的内容比如:
12
34
56
输出到file2.txt
56
34
12
备注:本算法只针对这样数据行的文件内容有效。
日期:2009.12.30
作者:DC
*/

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

int main(int argc, char **argv)
{
FILE *fp1,*fp2; //两个文件指针
int max = 10; //首次分配的int型的空间大小的个数
int *a; //分配空间首地址赋给a
int *b; //在realloc的时候,b接过指针,方便赋给a

/*分配空间函数malloc在头文件stdlib.h中*/
a = (int *)malloc(max * sizeof(int));
if (a == NULL)
{
printf("overflow while malloc\n");
exit(-1);
}

/*文件标准IO函数在stdio.h中*/
fp1 = fopen("file1.txt", "r");
if (fp1 == NULL)
{
printf("open file1 error:%s\n", strerror(errno));
exit(-1);
}

fp2 = fopen("file2.txt", "w");
if (fp2 == NULL)
{
printf("open file2 error:%s\n", strerror(errno));
exit(-1);
}

/*fscanf对本算法实现相当重要,因为文件中的格式确定,用这个函数很方便*/
int i=0, j=0;
while(fscanf(fp1, "%d", &a[i]) != EOF)
{
i++;j++;
if(i >= max) //当空间不够用时,用realloc函数实现
{
max = 2 * max;
b = (int *) realloc(a, max * sizeof(int));
if (b == NULL)
{
printf("overflow while realloc\n");
exit(-1);
}
a = b;
}
}

/*注意--j,因为最后一个读出来的是结束符'\0',
另外注意a[0]也是有效数据。*/
for (; --j>=0;)
{
fprintf(fp2, "%d\n", a[j]);
}

fclose(fp1);
fclose(fp2);

return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值