44深入理解C指针之---指针安全
安全 深入 理解 --- 指针 44
2023-09-11 14:22:23 时间
一、指针安全:指针的声明和初始化问题
1、指针不恰当的声明:
1)、声明的意思和真是的意图不一致,可以通过格式搞定;
2)、使用宏定义时,展开的含义有变,通过格式搞定;
3)、使用类型定义,使用更加方便
1 1 #include <stdio.h> 2 2 3 3 int main(int argc, char **argv) 4 4 { 5 5 int var1; 6 6 printf("input the var1: "); 7 7 scanf("%d", &var1); 8 8 int var2; 9 9 printf("input the var2: "); 10 10 scanf("%d", &var2); 11 11 12 12 printf("演示不恰当的指针声明:\n"); 13 13 int *ptr1, ptr2; 14 14 ptr1 = &var1; 15 15 ptr2 = var2; 16 16 printf("*ptr1: %d and ptr1: %p\n", *ptr1, ptr1); 17 17 printf("var1: %d and &var1: %p\n", var1, &var1); 18 18 printf("ptr2: %d and &ptr2: %p\n", ptr2, &ptr2); 19 19 printf("var2: %d and &var2: %p\n", var2, &var2); 20 20 printf("\n"); 21 21 22 22 #define PINT int* 23 23 printf("使用宏定义的方式定义指针:\n"); 24 24 PINT ptr3, ptr4; 25 25 ptr3 = &var1; 26 26 ptr4 = var2; 27 27 printf("*ptr3: %d and ptr3: %p\n", *ptr3, ptr3); 28 28 printf("var1: %d and &var1: %p\n", var1, &var1); 29 29 printf("ptr4: %d and &ptr4: %p\n", ptr4, &ptr4); 30 30 printf("var2: %d and &var2: %p\n", var2, &var2); 31 31 printf("\n"); 32 32 33 33 printf("使用类型定义的方式定义指针:\n"); 34 34 typedef int* PPINT; 35 35 PPINT ptr5, ptr6; 36 36 ptr5 = &var1; 37 37 ptr6 = &var2; 38 38 printf("*ptr5: %d and ptr5: %p\n", *ptr5, ptr5); 39 39 printf("var1: %d and &var1: %p\n", var1, &var1); 40 40 printf("*ptr6: %d and ptr6: %p\n", *ptr6, ptr6); 41 41 printf("var2: %d and &var2: %p\n", var2, &var2); 42 42 43 43 return 0; 44 44 }
2、特征:
1)、提供一种可移植的方式来声明与系统中可寻址的内存区域一致的长度
2)、用作sizeof操作符的返回值的类型
3)、用作内存相关函数malloc()和strlen()的参数类型
4)、常用来声明字符个数、循环计数、数组索引的长度
5)、可以用在指针的算术运算上
3、应用:
1)、打印是占位符是%zu,也可以是%u、%lu
2)、不要将负数赋值给size_t类型,一定要赋值整数才行
3)、对指针使用sizeof运算获取指针长度
代码如下:
相关文章
- MSSQL安全审计文件执行Rootkit-WarSQLKit
- SSL安全解决方案(转)
- Java实现 LeetCode 802 找到最终的安全状态 (DFS)
- 1-5-10 快恢在数字化安全生产平台 DPS 中的设计与落地
- 安全测试全面总结-5-shell命令注入漏洞
- Servlet, Struts2和SpringMVC 并发访问线程安全问题
- spring boot:swagger3的安全配置(swagger 3.0.0 / spring security / spring boot 2.3.3)
- BAT3首次合体,阿里集结最强阵容打造安全生态圈
- JavaSE进阶 | 深入理解多线程(线程安全synchronized)
- 100集华为HCIE安全培训视频教材整理 | IKE介绍(一)
- LabVIEW网络服务安全2
- 68:内网安全-域横向PTH&PTK&PTT哈希票据传递
- 基于知识图谱的分布式安全事件关联分析技术研究——这就是我需要的安全知识图谱!底层引擎是知识图谱的关联分析!
- 【算力网络】算力网络的技术创新——绿色与安全关键技术
- 网络层安全协议是如何保护你的网络安全?——深入解析网络层安全协议
- 安全测试——验证&日志文件