C语言笔记(二)-琐碎点

1.*ptr + 2 为地址后移两位的意思,类似于ptr[2]。注意编码时候如果数值自增要(*ptr)++。

2.函数设计时,内部的static变量生命周期是全局的,会影响函数的可重入性。所以关于"只要是定义在函数中的变量,变量生命周期都是本函数的,不影响函数可重入性。"的说法是错误的。

3. memmove_s函数可以安全地在重叠内存地址之间复制数据;memcpy_s肯定不行,因为restrict修饰符的修饰,上篇笔记说过这个事。

4. sprintf函数是将格式化数据写入字符串的函数。与printf类似,不同的是printf是写人屏幕。其定义如下。第一个参数为输出的字符串,必须有,否则会报非法操作。因为没输入数组长度,如果str长度不够,就会造成缓冲区溢出。

int sprintf(char *str, char * format [, argument, ...]);

strcpy函数定义如下,是将src指向的字符串复制到dest,不能复制内存地址重叠的数据。可能会造成缓冲区溢出。

char *strcpy(char *dest, const char *src)

5.局部变量的地址被返回的函数是错的。调用了这种函数,无法预测会发生什么。

int *Sum(int a, int b)
{
    int s = a + b;
    return &s;
}

6.指向某类型的指针,对该指针进行加减操作,地址的变化以指针的类型的大小为单位。所以对于一个char* 指针ptr如果指向一个int的变量,想让指针指向下一个char,则需要prt += 4。char为1字节,int为4字节,short为2个字节,任何指针都是4个字节。

7.循环队列计算元素个数的公式为:(尾-头+表长)%表长。队空的判断条件:front = rear。队满的判断条件为front = (rear + 1) % MAXSIZE具体解释见知乎文章:打开

8.C语言中左移<< 与右移>> 多少位表示乘以或除以2的多少次方。但int类型由于最高位是符号位,左移动会造成溢出。

9.rand函数生成的是伪随机数。是根据一个数(种子)为基准以某个递推公式推算出来的。一般rand函数要搭配srand函数,srand函数用来随机生成种子,如果没有它,那种子默认就是1,那么rand函数每次产生的随机数序列都是相同的。因为其伪随机数,不能用于有安全性要求的功能上去。

10.realpath函数用来将参数path所指的相对路径转换成绝对路径后存于参数resolved_path所指的字符串数组或指针中。可能会造成缓存区溢出。

char *realpath(const char *path, char *resolved_path)

11.两个不同类型的数据比大小时候,有符号位的会转变为无符号位,会出现-1比1大的情况。

12.程序中全局可以访问的信息,使用全局变量/堆内存中的变量/static变量均可以实现,并不是只能使用全局变量保存。

13.SQL注入是关于C安全编码规范方面的问题,需要防止SQL注入,可以采用参数化查询,对外部数据校验,对外部SQL特殊字符转义等方式。其中外部数据校验要采用白名单、

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值