#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
#include<time.h>
//1.定义一个结构体
struct dicts
{
char * word;
char * trans;
};
int main(void)
{
int MAXNUM = 0;
char arr[1024] = { 0 };
int i = 0;
FILE * fp = fopen("D:\\dict.txt", "r");
if (!fp)
{
printf("文件打开失败!");
return -1;
}
while (!feof(fp))
{
fgets(arr, 1024, fp);
i++;
}
MAXNUM = i / 2;
printf("共收录%d个单词\n", MAXNUM);
struct dicts * dic = (struct dicts *) malloc(sizeof(struct dicts)*MAXNUM);
struct dicts * dic1 = (struct dicts *) malloc(sizeof(struct dicts));
dic1->word = '\0';
dic1->trans = '\0';
rewind(fp);
//将所有的单词都读取到dic中
i = 0;
while (!feof(fp))
{
//printf("%d\n", i);
memset(arr, 0, 1024);
fgets(arr, 1024, fp);
//printf("%s\n", arr);
dic[i].word = (char *)malloc(strlen(arr) + 1);
memset(dic[i].word, 0, strlen(arr) + 1);
strncpy(dic[i].word, arr, strlen(arr) + 1);
memset(arr, 0, 1024);
fgets(arr, 1024, fp);
//printf("%s\n", arr);
dic[i].trans = (char *)malloc(strlen(arr) + 1);
memset(dic[i].trans, 0, strlen(arr) + 1);
strncpy(dic[i].trans, arr, strlen(arr) + 1);
i++;
//printf("%d\n", i);
}
fclose(fp);
time_t start_time;
time_t end_time;
while (1)
{
printf("请输入要查找的单词(若想退出请输入“exit()”):\n");
while (1)
{
memset(arr, 0, 1024);
scanf("%s", arr);
if (strlen(arr) > 1024)
{
printf("输入的字符数过大,请从新输入!\n");
}
else
{
break;
}
}
getchar();//接收回车
if (!strncmp(arr, "exit()", 6))
{
printf("退出成功!\n");
break;
}
//将arr中的单词改成标准格式 #单词
int len = strlen(arr);
for (int j = 0; j < len; j++)
{
arr[len - j] = arr[len - j - 1];
}
arr[0] = '#';
i = 0;
//查找单词
printf("正在查找,请稍后......\n");
start_time = time(NULL);
while (1)
{
if (!strncmp(arr, dic[i].word, strlen(arr)))
{
dic1->word = (char*)malloc(strlen(arr) + 1);
strncpy(dic1->word, arr, strlen(arr) + 1);
dic1->trans = (char *)malloc(strlen(dic[i].trans) + 1);
strncpy(dic1->trans, dic[i].trans, strlen(dic[i].trans) + 1);
printf("%s\n", dic1->word);
printf("%s\n", dic1->trans);
free(dic1->trans);
free(dic1->word);
break;
}
i++;
if (i >= MAXNUM)
{
printf("没有查找到该单词!\n");
break;
}
}
end_time = time(NULL);
printf("本次查询用时:%ld(s)\n", (long)(end_time - start_time));
}
for ( i = 0; i < MAXNUM; i++)
{
free(dic[i].word);
free(dic[i].trans);
}
free(dic1);
free(dic);
return 0;
}
为啥最后输入exit()后,最后两行 free(dic1)和 free(dic)释放不了,老是卡在这运行不了。