int main(int ac, char *pav[])
{
if (ac!=2){
printf("程序名 要读取的文件名\n")
printf("test.exe 1.txt\n")
return 0
}
FILE *fp = fopen(pav[1],"r+")
if(fp == 0)
{
printf("fail to open the file1 !\n")
return 0
}
char buf[256] = {0}
while(!feof(fp))//判断文件是否已结束
{
fgets(buf,256,fp)
}
printf(buf)
return 0
}
先打开文件。自己写过getline函数,取文本的一行保存到一个字符串中。
用malloc函数给line分配空间。
对于第一行,取特定的字符串line取代替它,如果第二行是空行也这么做
在建立一个字符串数组,用strdup将他们放入字符串数组strline[i]中。
构造一个结构数组,将得到的字符串line用strtok(line,"
")函数分开依次放入结构数组中的字符串成员中,记得不能用字符串数组的字符串,strtok函数会改变字符串的,而line就无所谓了。
知道用getline函数返回一个负数(一般我用负数标记文档读写完毕)。结束读 *** 作。
现将前面的名字以及空行写入new的文本中,用putline函数(将字符串写入文档中)。
再从字符串数组逆序写入new的文本中。
如果结构数组不用了,就释放strdup分配的空间,并且以及line的空间,前面两行无所谓,反正占的空间不大。所有用数组,还是动态分配都没什么大的关系。
#include<stdio.h>
#include<string.h>
#define M 100//最大行数
int main()
{
FILE *fp=NULL
int nums[M],age[M],i=0,n1,n2,len=0
char name[M][10],str[10]
fp=fopen("c:\\test.data","r")
while(fscanf(fp,"%d%s%d",&n1,str,&n2)!=-1)
{
nums[i]=n1
strcpy(name[i],str)
age[i]=n2
i++
len++
}
for(i=0i<leni++)
printf("%d %s %d\n",nums[i],name[i],age[i])
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)