字符串加密写入文件(c语言实现)

说明:该程序实现三个功能

  • 字符串加密(采用Assic+3加密):char* encrypt(char* ch);
  • 将加密字符串写入文件:void pushFile(char* ch, char* fname);
  • 读取文件中加密字符串:char* popFile(char* ch,char* fname);

分析:

  • 动态内存分配:(char*)malloc(sizeof(char)*100)  //动态分配100*sizeof(char)个字节空间,强制类型转换为char*
  • 文件模式:
    • r :只读;若文件不存在,打开失败
    • w :只写;删除原有内容重新写入;若文件不存在,创建文件
    • a :追加;只能写入内容,只追加内容在文件内容尾部;文件不存在,创建文件
    • r+ :可读可写;不删除原有内容,在写入位置覆盖原有内容;若文件不存在,打开失败
    • w+:可读可写;清空原有内容;若文件不存在,创建文件
    • a+:可读可写;不清空原有内容,只追加内容在原内容尾部;若文件不存在,创建文件
  • 文件读写:
    • 打开文件:FILE* file =  fopen("fname", "w")   
      • fname:需要打开的文件名;
      • w:打开文件的方式为删除原有内容,重写入 文件不存在,还可以创建文件
    • 写入内容:int num = fwrite(ch, sizeof(char),strlen(ch), file);
      • ch:写入内容的容器
      • sizeof(char):写入每个字符字节数
      • strlen(ch):每次写入文件的字符个数,可为任意值
      • file:写入的文件
      • num:返回值为写入文件字符数,若为0,表示写入结束或没有字符可写入
    • 读取内容:int num = fread(str, sizeof(char), 1, file);
      • str:读取内容的容器
      • sizeof(char):每个读取字符的字节数
      • 1:每次读取的字符个数,可为任意值
      • file:读取的文件
      • num:返回值为每次读取的字符个数,若为0,表示读取结束或没有字符可读取
#include <stdio.h>
#include <malloc.h>
char* encrypt(char* ch);
void pushFile(char* ch, char* fname);
char* popFile(char* ch,char* fname);

void main(){
	char ch[10] = {0};
	printf("请输入需要加密的字符串:"); 
	scanf("%s", &ch);
	
	//将加密字符串写入文件
	char* cont; 
	char* read;
	char* fname[10];
	char* fnameR[10];
	cont = (char*)malloc(sizeof(char)*strlen(ch));
	read = (char*)malloc(sizeof(char)*100);
	cont =  encrypt(ch);
	printf("请输入写入文件名:");
	scanf("%s", &fname); 
	pushFile(cont, fname);
	printf("\n请输入读取文件名:");
	scanf("%s", &fnameR);
	//gets(fnameR);//gets(arrayName) 读取字符串
	popFile(read, fnameR); 
}

//字符串加密,加密算法(Assic+3) 
char* encrypt(char* ch){
	int i;
	char* temp; 
	temp = (char*)malloc(sizeof(char)*strlen(ch));
	for(i=0; i<strlen(ch); i++){
		temp[i] = (char)(ch[i] + 3);
		//printf("%c\n", temp[i]);
	}
	return temp;//返回一个加密数组 
}

//写入文件 
void pushFile(char* ch, char* fname){
	FILE* file;//FILE类必须全部大写 
	file = fopen(fname, "a+");//a+:若文件存在,内容追加到最后;若文件不存在,创建文件
	int num = fwrite(ch, sizeof(char),strlen(ch), file);
	if(num==0){
		printf("文件写入失败!"); 
	}
	printf("\n文件写入成功!"); 
	fclose(file) ;
}

//读取文件
char* popFile(char* ch,char* fname){
	FILE* file= fopen(fname, "r");
	char str[10] = {0}; 
	int num;
	int i = 0;
	/*
	循环读取字符,存入ch数组 ;
	num是返回每次读取字符符个数,num=0,表示文件内容为空 
	*/
	while(num = fread(str, sizeof(char), 1, file)){
		printf("%d :", num);
		printf("%s\n", str);
		ch[i] = str;
		i++;
	}
	printf("\n文件读取成功!"); 
	fclose(file);
	return ch;
} 
发布了39 篇原创文章 · 获赞 1 · 访问量 1130

猜你喜欢

转载自blog.csdn.net/qq_39421693/article/details/104737343