改善C代码的建议
编写高质量的C语言代码,避免一些不必要的BUG
Tonson_
这个作者很懒,什么都没留下…
展开
-
避免使用指针变量作为函数参数去申请动态内存
如果函数的参数是指针,避免用该指针去申请动态内存在C程序中,如果函数的参数是一个指针,那么应该坚决避免使用该指针申请动态内存。来看下面一个示例代码:void GetMemory(char *p,int num){ p=(char*)malloc(sizeof(char)*num);}int main(void){ char *str=NULL; GetMemory(str,10); if(str==NULL) { printf("str==NULL\n"); } else {原创 2020-11-18 11:19:24 · 224 阅读 · 0 评论 -
有符号执行位操作导致的BUG
尽量避免对未知的有符号位执行位操作在C语言中,如果在未知的有符号上执行位操作,很可能会导致缓冲区溢出,从而在某些情况下导致攻击者执行任意代码,同时,还可能会出现出乎意料的行为或编译器定义的行为。如下列代码:#include<stdio.h>int main(void){ int y=0x80000000;//2^31,已超出int类型的范围。 printf("%U",y>>24);//以十进制无符号形式输出。 return 0;}首先定义了一个整型变量y为0x8原创 2020-11-13 15:54:16 · 358 阅读 · 0 评论 -
谨慎extern申明外部变量
extern关键字用法在C语言程序中,我们用extern关键字对某个变量作“外部变量申明”,表示该变量是一个已经定义的外部变量,编译器就会自动地在所有源文件里面查找该变量地定义。一、在源文件中扩展全局变量的有效范围全局变量的作用范围只限于定义处到文件结束。若想在定义之前使用全局变量,就需要extern关键字来解决。#include<stdio.h>int main(){ int result; extern int number1; extern int number2; r原创 2020-11-11 23:40:21 · 1292 阅读 · 0 评论 -
C语言typedef关键字用法总结
C语言 typedef用法总结C语言允许我们使用typedef关键字来重新定义类型名,当跨平台移植程序时,我们只需要修改以下typedef的定义即可,而不用对其他源代码做任何修改。用法一:为基本数据类型定义新的类型名typedef int myIntmyInt value //相当于int value重新定义int类型的别名为Tdata用法二:为自定义数据类型(结构体、联合体和枚举类型)定义简洁的类型名称以结构体为例子:struct Complex{ double image; d原创 2020-11-11 10:07:11 · 796 阅读 · 0 评论 -
C语言--数据溢出导致的缓冲区(堆栈)损坏
防止数据类型变量产生回绕与溢出产生以上大部分问题的原因主要是:1.不同数据类型的算术操作,产生了回绕与溢出。2.不同数据类型的逻辑运算操作,产生了回绕与溢出。3.存储的数据大小超过了数据类型的最大值或最小值,产生了溢出和回绕。一、显示地指出某个变量是signed char类型还是unsigned char来执行算数运算由于不同编译器对char类型的变量定义不同,有可能是signed char,也有可能是unsigned char,所以,只有我们显示地指定数据类型,才能得到唯一的结果。二、使用s原创 2020-11-10 09:41:54 · 1857 阅读 · 0 评论