在c语言之中文件的读写和函数与函数之间参数的调用

在c语言之中文件的读写,先请看下面一个例子。

#include <stdio.h>

int main()
{
 FILE*pFile;
 char mystring[100];
 char mystring1[100];

 pFile=fopen("C:\\1.txt","r");
 if(pFile==NULL)
  return 0;
 else
 {
  //while(fgets(mystring,100,pFile)!=NULL)
  //{
  // printf("%s\n",mystring);
  //}
 fgets(mystring,100,pFile);
 printf("%s\n",mystring);
 fgets(mystring1,100,pFile);
 printf("%s\n",mystring1);
 fclose(pFile);
 }
 return 1;
}

上面这个程序之中,fopen是打开这个txt文件,路径名的格式可以参照上面的,

fgets()函数的作用是一行一行读取文件中内容。如第一次调用fgets,读取文

件中的第一行内容,第二次调用,读取文件之中的第二行内容,依次直到最后。

再看下面一段程序:

#include <stdio.h>

int main()
{
 FILE*pFile;
 char mystring[100];

 pFile=fopen("C:\\1.txt","r");
 if(pFile==NULL)
  return 0;
  while(fgets(mystring,100,pFile)!=NULL)
  {
   printf("%s\n",mystring);
  }
 fclose(pFile);
 
 return 1;
}

上面这个程序虽然也是利用fgets()一行一行读取文件之中的内容,但是由于加

了这个判断条件后就会把这个文件整个打印出来。如果你定义的字符串数组太

小了,无法放下文件中所有的内容,怎么办?此时fgets只会读取100-1=99个字

符串,后面的内容会自动舍去。fgets读取一行时是以"\n"来判断的,如果碰到这

个符号,则fgets会认为已经把这一行读完了。比如在你的txt文件中有空行,fgets

是会把空行读出来,并打印出来的。

 

 说完了读取文本,再来看看写文本。

 看下面一段程序。

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

int main(int argc,char *argv)
{
 FILE*fp;
 char str[128];
 if((fp=fopen("c:\\test.txt","w"))==NULL)
 {
  printf("cannot open file!");
  return 0;
 }
 while((strlen(gets(str)))!=0)
 {
  fputs(str,fp);
  fputs("\n",fp);
 }
 fclose(fp);
 return 1;
}

写文本时,在fp=fopen("c:\\test.txt","w")中,即使你的c盘中没有这个test.txt文件,当

你build时也会自己建立,还有当你从新重新编译,并构造它然后输入新的数据时,之

前的数据会被覆盖掉。

 

接下来谈到一个重要的问题函数之间数据的传递,之所以会出现这个问题是因为在上面

读取txt文件之中内容时,我一行一行读取,每读取一行,都要保存的一个字符串数组中,

然后把这些字符串数组用MD5算法加密。我想了很久,找出的解决办法是:定义一个结

构体,把这些读取到的要用的数据存储到这个结构体之中,之后要用时再从这个结构之中

取出,具体使用方法是看下面几段代码。

typedef struct
{
 char phone_Number[20];
 char device_Number[20];
 char my_time[20];
 char in_decrypt[100];
}read_info;

 

int ReadFile()
{
 FILE*pFile;
 char mystring1[100];
 char mystring2[100];

 memset()
 read_info p;

 pFile=fopen("C:\\1.txt","r");
 if(pFile==NULL)
  return 0;
 else
 {
  //while(fgets(mystring,100,pFile)!=NULL)
  //{
  // printf("%s\n",mystring);
  //}
  fgets(mystring1,100,pFile);
  fgets(p.phone_Number,20,pFile);
  fgets(p.device_Number,20,pFile);
  fgets(p.my_time,20,pFile);
  fgets(mystring2,100,pFile);
  fgets(p.in_decrypt,100,pFile);
  if(strlen(mystring1)==0||strlen(p.phone_Number)==0||strlen(p.device_Number)==0||strlen(p.my_time)==0||strlen(mystring2)==0||strlen(p.in_decrypt)==0)
   return 0;
 fclose(pFile);
 }
 return 1;
}

 

int getInfoMD5()
{
 MD5_CTX md5;
  MD5Init(&md5);  //初始化用于md5加密的结构
  unsigned char encrypt[200];     //存放于加密的信息
  unsigned char decrypt[17];       //存放加密后的结果
  int result = 0;
  read_info p;

  result=ReadFile();
  if(result!=1)
  {
   return 0;
  }
  strcat(encrypt,p.phone_Number);
  strcat(encrypt,p.device_Number);
  strcat(encrypt,p.my_time);

  //scanf("%s",encrypt);                 //输入加密的字符

  MD5Update(&md5,encrypt,strlen((char *)encrypt));   //对欲加密的字符进行加密
  MD5Final(decrypt,&md5);                                            //获得最终结果

  result=strcmp(p.in_decrypt,decrypt);
  if(result!=0)
  {
   return 0;
  }

  return 1;
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值