
C
ljg888
这个作者很懒,什么都没留下…
展开
-
C语言中数据类型不一致导致安全性漏洞-memcpy()的参数 int 与 unsigned
//库函数memcpy()的声明void *memcpy(void *dest, void *src, size_t n);//核心内存区域,拥有用户可访问的数据#define KSIZE 1024char kbuf[KSIZE];//最多可以从核心内存中向用户内存区复制maxlen字节的数据int copy_from_kernel(void *user_dest, int max原创 2012-09-30 23:11:17 · 5162 阅读 · 0 评论 -
C语言中除以2的幂
在大多数机器上,除法要比乘法(乘法需要10个或更多时钟周期)更慢,需要30个或更多的时钟周期。除以2的幂可以用移位运算来实现,只需要一个时钟周期。无符号和补码数分别使用逻辑移位和算术移位来达到目的。整数除法总是舍入到零。对于使用算术右移的补码机器,C表达式:x / y = ( x > k。(其中,y = 2k )下面是x/16的C语言实现:/*习题2.42开发环境VC++6原创 2012-10-02 22:11:49 · 3458 阅读 · 0 评论 -
判断两个整数相减会不会溢出
需要注意的是一个特殊情况:当减数是机器所能表示的最小负数时。/*练习题2.32开发环境VC++6.0*/#includeint taddOK(int, int);int tsubOK_Buggy(int x,int y);int tsubOK(int x,int y);void main(){ int x = 0; int y = -2147483648;//-原创 2012-10-01 16:22:42 · 4762 阅读 · 1 评论 -
标准C语言<string.h>中的strlen() 与 VC++ 6.0 中的strlen()
标准C语言中的中的strlen()返回值为unsigned int型: size_t strlen(chonst char* p);//p 的长度不计结束符。typedef unsigned int size_t; 也就是说size_t 就是unsigned int 类型。而VC++6.0 中的strlen()返回值为int型:用VC++ 6.0 编程时,如果加了#原创 2012-09-30 14:22:14 · 4248 阅读 · 0 评论 -
判断两个整数相加会不会溢出
实际上,大多数电脑中,整数都是用补码来表示的。发生溢出不会报警,只是将最高位直接截断。/*习题2.30C语言开发环境VC++6.0*/#includeint taddOK(int, int);void main(){ int x, y; printf("Input two integers:\n"); scanf("%d %d",&x, &y); pri原创 2012-10-01 15:22:55 · 4430 阅读 · 3 评论 -
判断C语言中int 与 unsigned 乘法是否会溢出
在C语言中,int 与 unsigned 乘法被定义为产生w(w为机器字长)位的值。如果乘积超过w位,所产生乘积的高位将被舍弃。下面这段代码用来判断整数乘法会不会溢出:/*练习题2.36*//*开发环境VC++ 6.0*/#includevoid main(){ unsigned x = 4294967295; unsigned y = 8; unsigned mul原创 2012-10-02 10:09:12 · 6588 阅读 · 0 评论 -
C语言中的无符号数与有符号数混合运算时隐含转换问题
//开发平台VC++6.0#include#includeint strLonger(char*,char*);void main(){ char *s = "d"; char *t = "Id"; printf("%d\n",strLonger(s,t));}int strLonger(char *s, char *t){ return strlen(s) - str原创 2012-09-30 14:46:25 · 1876 阅读 · 0 评论 -
C语言中无符号数运算判断溢出
对于无符号加法运算,当执行C程序时,不会将溢出作为错误而发信号。例如要计算s = x + y;如果溢出则会得到结果s = (x + y) %2w或者s = x + y - 2w(w 是机器中无符号的最大二进制位数)。又因为x w且y w,所以可以用if(s原创 2012-10-01 10:16:43 · 8654 阅读 · 0 评论 -
C语言运算符优先级 详细列表
文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。恩,问这个问题的人太多了,懒得继续回答,直接贴上来自己看。。。优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]转载 2012-11-02 21:13:42 · 748 阅读 · 0 评论