课程回顾
2作业讲解
3 指针复习
(1) 返回栈区地址
(错
(对
(错,p一直是空的,同时引起堆区空间没释放
( tmp指针给堆空间赋值,最后堆区没有释放
04 指针复习_2
(注意:strcpy的第一个参数虽然没有* 但是实际操作的是指针所指向的内存,即:堆区的内存
案例:
(p没有指向空间,所以段错误
5 二级指针做形参
07_快译通案例:单词的存储
08_快译通案例:单词遍历
09_快译通案例:释放堆区空间
10_快译通案例:单词查询
#include
#include
#include
#define MAX 3
struct dict
{
char *key;
char *content;
};
void get_dict(struct dict **tmp)
{
//在堆区分配MAX个结构体空间
*tmp = (struct dict *)malloc(MAX * sizeof(struct dict));
if (*tmp == NULL)
{
return;
}
//需要给每个结构体设置内容
//第0个结构体
//放第0个单词
(*tmp)[0].key = (char *)malloc(strlen("a") + 1);
strcpy((*tmp)[0].key, "a");
//放第0个单词的解析
(*(*tmp + 0)).content = (char *)malloc(strlen("art.字母a") + 1);
//第1个结构体
(*tmp)[1].key = (char *)malloc(strlen("a.m.") + 1);
strcpy((*tmp)[1].key, "a.m.");
//放第1个单词的解析
(*(*tmp + 1)).content = (char *)malloc(strlen("a啊实打解析实的字母a") + 1);
//第1个结构体
(*tmp)[2].key = (char *)malloc(strlen("abandon") + 1);
strcpy((*tmp)[2].key, "abandon");
//放第2个单词的解析
(*(*tmp + 2)).content = (char *)malloc(strlen("抛弃、放弃") + 1);
}
void print_dict(struct dict *tmp)
{
int i = 0;
for (i = 0; i < MAX; i++)
{
printf("[%s]%s\n", tmp[i].key, tmp[i].content);
}
}
void free_dict(struct dict *tmp)
{
//先释放成员变量
int i = 0;
for (i = 0; i < MAX; i++)
{
if (tmp[i].key != NULL)
{
free(tmp[i].key);
tmp[i].key = NULL;
}
if (tmp[i].content != NULL)
{
free(tmp[i].content);
tmp[i].content = NULL;
}
}
//再释放结构体指针变量
free(tmp);
tmp = NULL;
}
int search_dict(struct dict *tmp, char *key, char *content)
{
int i = 0;
for (i = 0; i < MAX; i++)
{
if (strcmp(tmp[i].key, key) == 0)
{
strcpy(content, tmp[i].content);
return 1;
}
}
return 0;
}
int main(int argc, char const *argv[])
{
struct dict *p = NULL;
//1、给p分配空间,分配完空间后,需要设置内容
get_dict(&p);
//2、遍历单词
// print_dict(p);
//查询功能
char key[1024]; //单词
char content[1024]; //单词解析
while (1)
{
printf("请输入需要查询单词");
scanf("%s", key);
if (strcmp(key, "break") == 0)
{
break;
}
//如果有返回真,没有返回假
int flag = search_dict(p, key, content);
if (flag == 0)
{
printf("没有此单词: %s\n", key);
}
else
{
printf("[%s]的解释为: %s\n", key, content);
}
}
//3、释放空间
free_dict(p);
return 0;
}
11_快译通案例:代码引导
12_快译通案例:代码编译运行