zoukankan      html  css  js  c++  java
  • 零基础逆向工程16_C语言10_宏定义_头文件_内存分配_文件读写

    #define

    无参数的宏定义的一般形式为:#define 标识符 字符序列

    如:#define TRUE 1
    注意事项:
    1.之作字符序列的替换工作,不作任何语法的检查
    2.如果宏定义不当,错误要到预处理之后的编译阶段才能发现

    带参数宏定义:#define 标识符(参数表)字符序列

    如:#define MAX(A, B) ((A) > (B)?(A):(B))
    代码 x = MAX(p, q)将被替换成 y = (p) > (q)? (p):(q)
    注意:
    1.宏名标识符与左圆括号之间不允许有空白符,应紧接在一起
    2.宏与函数的区别:函数分配额外的堆栈空间,而宏只是替换
    3.为了避免出错,宏定义中给形参加上括号
    4.末尾不需要分号
    5.define可以替代多行的代码,记得后面加 ,如:

    #define MALLOC(n, type)
                        ((type*)malloc((n)*sizeof(type)))
    

    头文件

    分别写在不同的文件中

    重复包含的问题

    #ifndef (XXX)
    #define XXX

    内存分配与释放

    int* ptr;  //声明指针
    
    //在堆中申请内存,分配128个int
    ptr = (int*)malloc(sizeof(int)*128);
    
    //无论申请的空间大小 一定要进行校验 判断是否申请成功
    if (ptr == NULL)
    {
    	return 0;
    }
    
    //初始化分配的内存空间
    memset(ptr, 0, sizeof(int)*128);
    
    //使用
    *(ptr) = 1;
    
    //使用完毕 是否申请的堆空间
    free(ptr);
    
    //将指针设置为NULL
    ptr = NULL;
    

    文件读写相关函数

    1.fopen函数

    2.fseek函数

    3.ftell函数

    4.fclose函数

    自我检测

    1.用十六进制文本编辑器,打开一个记事本的.exe文件,再打开在内存中的记事本进程,记录下这两个文件的不同。
    2.将记事本的.exe文件读到内存,并返回读取后在内存中的地址
    3.将内存中的数据存储到一个文件中,(.exe格式),然后双击打开,看是否能够使用。

  • 相关阅读:
    ztz11的noip模拟赛T3:评分系统
    20181030NOIP模拟赛T3
    20181030NOIP模拟赛T2
    20181030noip模拟赛T1
    20181029NOIP模拟赛T3
    20181029NOIP模拟赛T2
    20181029noip模拟赛T1
    最优贸易(tarjan,spfa)
    [ZJOI2009]假期的宿舍(二分图匹配)
    上白泽慧音(tarjan,图的染色)
  • 原文地址:https://www.cnblogs.com/flatcc/p/7501102.html
Copyright © 2011-2022 走看看