免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1387 | 回复: 2
打印 上一主题 下一主题

请高手帮我看看这个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-10 23:44 |只看该作者 |倒序浏览
源代码如下。需要实现的功能就是一个接口文件某个字段要加密
比如原始接口文件1.avl
1111&33333&44444&
2222&44444&55555&
通过加密后encrypt_interface 1.avl f.avl 1
输出的接口文件始终从第二行开始要多一个“&”出来。不晓得究竟是怎么回事。希望大家帮忙看看
f.avl
|d|d|d|d&33333&44444&
&|e|e|e|e&44444&55555&

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define         MAXLEN                        512
#define         MAXFLD                        100
#define         MAX_NAMELEN                    128
#define         RECORD_LENGTH                 1024
#define         TIME_LENGTH                 32
#define         MAX_THREAD                 1024

Encrypt(char* cSrc,char* cDest)
{
char c;
int i,h,l,j=0;
for (i=0;i<(int)strlen(cSrc);i++)
{
c=cSrc[i];
h=(c>>4)&0xf;
l=c&0xf;
cDest[j]=h+'y';
cDest[j+1]=l+'c';
j+=2;
}
cDest[j]='\0';
return 0;
}
int main(int argc, char *argv[])
{
   char input[100];
   char output[100];
   char domain[10];
   FILE *fp,*ofp; //定义文件指针
   //判断输入参数是否为三个
   if (argc == 4) {
   strcpy (input, argv[1]);
   strcpy (output,  argv[2]);
   strcpy (domain,  argv[3]);
   //输出提示处理参数
   printf("原始接口为:%s\n",input);
   printf("输出接口为:%s\n",output);
   printf("加密字段为:%s\n",domain);
   
   if((fp=fopen64(input,"r"))==NULL)//判断是否成功打开源文件,执行读取操作
        {
                printf("%s 文件打开错误\n",input);
                exit(0);
        }
        char lineBuff[4000];
        int i=0;
        while(fgets(lineBuff, 4000,fp) != NULL)
{
        i++;
        //用strtok()函数提取分隔符隔开的每个字符串并用加密函数处理
        //定义ii初始化用来接受有多少个&分割域
        int ii=0;
        int num = atoi(domain);
        char* token = strtok( lineBuff, ",-&");
                        while( token != NULL )
                                   {
                                /* 处理当前取到的域*/
                                        ii++;
                                        if ( ii == num ) {
                                                        printf( "第%d加密域为:%s \n",ii,token );
                                                        char dest1[128]="\0";
                                                        Encrypt(token,dest1);
                                                        printf("第%d分割域加密后的字符串为:%s\n",ii,dest1);
                                                       
                                                                if((ofp=fopen64(output,"at+"))==NULL)//判断是否成功打开源文件,执行读取操作
                                                                        {
                                                                        printf("%s 文件打开错误\n",output);
                                                                    exit(0);
                                                                        }
                                                                        fprintf(ofp,"%s&",dest1);
                                                                        fflush(ofp);
                                                                        fclose(ofp);//关闭文件
                                                       
                                                }
                                        else {
                                                        printf( "第%d分割域为:%s \n",ii,token );
                                                                if((ofp=fopen64(output,"at+"))==NULL)//判断是否成功打开源文件,执行读取操作
                                                                        {
                                                                        printf("%s 文件打开错误\n",output);
                                                                    exit(0);
                                                                        }
                                                                        fprintf(ofp,"%s&",token);
                                                                        fflush(ofp);
                                                                        fclose(ofp);//关闭文件
                                                }
                                        /* 处理下一个 */
                                        token = strtok( NULL, ",-&");
    }


        //printf("第%d行内容为:%s\n",i,lineBuff);

}       
   fclose(fp);//关闭文件

   } else {
      printf ("使用方法: %s  原始接口 加密输出接口 加密字段\n",argv[0]);
   } // end if
   
   return 0;
}

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52
2 [报告]
发表于 2012-07-11 16:39 |只看该作者
每一行记录结尾的换行符号被strtok当作数据取出,并写入文件导致。

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52
3 [报告]
发表于 2012-07-11 16:42 |只看该作者
建议你别在循环里打开文件写入关闭, 开始的地方就打开,转换完成后一起关闭。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP