C语言深度解剖读书笔记(7.国嵌答疑问题)
来源:互联网 发布:天天酷跑软件 编辑:程序博客网 时间:2024/06/01 15:42
转自 http://blog.csdn.net/mbh_1991/article/details/10644935
本节知识点:
1.可以利用这个宏 #define OFFSET(type,number) (int)(&(((type*)0)->number)) 求出结构体中成员的偏移量
2.对于assert的使用是:
可以这样
- assert(dst && src);
- assert((NULL != dst) && (NULL != src));
3.给一个考指针运算的面试题吧:
- #include <stdio.h>
- void main()
- {
- int TestArray[5][5] = { {11,12,13,14,15},
- {16,17,18,19,20},
- {21,22,23,24,25},
- {26,27,28,29,30},
- {31,32,33,34,35}
- };
- int* p1 = (int*)(&TestArray + 1);
- int* p2 = (int*)(*(TestArray + 1) + 6);
- printf("Result: %d; %d; %d; %d; %d\n", *(*TestArray), *(*(TestArray + 1)),
- *(*(TestArray + 3) + 3), p1[-8],
- p2[4]);
- }
4.看看下面的代码,感受下安全编程的重要性:
- #include<stdio.h>
- int main(int argc, char *argv[])
- {
- int flag = 0;
- char passwd[10];
- memset(passwd,0,sizeof(passwd));
- strcpy(passwd, argv[1]);
- if(0 == strcmp("LinuxGeek", passwd))
- {
- flag = 1;
- }
- if( flag )
- {
- printf("\n Password cracked \n");
- }
- else
- {
- printf("\n Incorrect passwd \n");
- }
- return 0;
- }
首先如果我输入11个字符且最后一个字符是大于0的话,就惨了,strcpy是要copy到'/0'的。他会一直把这11个字符都copy到passwd数组中,此时数组越界了,最后一个字符就把flag标志位个赋值了,if条件就满足了,密码就被破解了!
所以应该使用安全性更高的strncpy:
- strncpy(passwd,argv[1],9);
0 0
- C语言深度解剖读书笔记(7.国嵌答疑问题)
- C语言深度解剖读书笔记(7.国嵌答疑问题)
- C语言深度解剖读书笔记(7.国嵌答疑问题)
- C 语言深度解剖 读书笔记
- 《C语言深度解剖》读书笔记
- 《C语言深度解剖》读书笔记
- C语言深度解剖读书笔记
- C语言深度解剖读书笔记
- C语言深度解剖读书笔记
- C语言深度解剖读书笔记
- C语言深度解剖读书笔记
- C语言深度解剖读书笔记
- C语言深度解剖读书笔记
- C语言深度解剖读书笔记
- 读书笔记《c语言深度解剖》(1)
- 读书笔记《c语言深度解剖》(2)
- 读书笔记《c语言深度解剖》(3)
- 读书笔记《c语言深度解剖》(4)
- Framework框架
- Android中点击通知栏图标,启动一个应用
- ACdream 1148 GCD SUM(数学:推理+数论:莫比乌斯函数)
- eclipse中关于tomcat的配置步骤
- 杭电 2201
- C语言深度解剖读书笔记(7.国嵌答疑问题)
- 静态浇铸的
- 实现lwip的DHCP自动获取ip地址
- Spring基于 Annotation 的简单介绍
- linux 字节序问题处理
- haproxy实现hive的ha
- My97DatePicker日期控件的使用
- C语言深度解剖读书笔记(8.以后的c语言学习计划)
- hdoj 4882 ZCC Loves Codefires 【贪心】