说明:该程序实现三个功能
- 字符串加密(采用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,表示读取结束或没有字符可读取
- 打开文件:FILE* file = fopen("fname", "w")
#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;
}