复习C语言随笔 七

24 篇文章 0 订阅
20 篇文章 0 订阅

复习C语言随笔 七

函数

  • 1 isdigit()

检查字符是否为数字字符。若是,返回非0;否,返回0。头文件: stdlio.h 。

  • 2 memset(void *buffer, int ch, size_t count )

函数拷贝ch 到buffer 从头开始的count 个字符里, 并返回buffer指针。 memset() 可以应用在将一段内存初始化为某个值。头文件: string.h 。例如:

 memset( the_array, '\0', sizeof(the_array);

特殊用法: 将整型数组初始化为0

#include<stdio.h>
#include<string.h>
int main(){
    int a[10], i;
    memset(a,0,40); 
    for(i=0; i<sizeof(a)/sizeof(a[0]); i++) printf("%d ",a[i]);
    return 0;
}
  • 3 strlen()
    遇到ASCLL码0结束,或者说遇到’\0’ 。
    ‘0’ –48
    ‘\0’ –0
    NULL –0

  • 4 static 修饰变量
    修饰全局变量 改变链接属性
    修饰局部变量 改变生命周期
    修饰函数 改变链接属性

数组

#include<stdio.h>

int main(){
    char arr1[] = "abc";
    char arrr2[] = {'d', 'e', 'f'};
    char *p1 = "xyz";     // xyz 放在只读数据区,分配内存, p1指向x 
    char *p2 = "xyz";     // 没有分配内存 , p2指向x 

    return 0;
}

一句话

c语言编译器在编译时会对变量进行重命名。当使用变量或函数时未定义或写错了变量名或函数名,会报错: 无法解析。。。。XXXXX ,此处的XXXXX是编译器处理之后的名字,而在源码中并没有出现XXXXX 。


源码的保护

在平时的学习过程中,一个程序的代码基本上都是放在一个.c文件中,比如下面的例子:

然而在开发时,这样做有一个十分明显的弊端: 泄露源码 ———这对于开发者而言造成的经济损失的难以估量的。 所以,就可以通过把源码中各种函数生成为静态库的方式进行源码保护。

第一步:对源码进行主函数与自定义函数的分离

以这里的函数 PrintAB() 为例: 先在头文件的文件夹下创建 PrintAB.h 文件,声明PrintAB()函数


然后在源文件里创建一个 PrintAB.c 文件用 #include”PrintAB.h”引用刚刚创建的头文件,并完成函数PrintAB() 的定义:


接着在源代码里写上对头文件 PrintAB 的引用,此时就完成了分离操作。编译并运行代码,完美!


第二步:创建静态库

首先新建一个空项目,为了辨识,项目名取为PrintAB。


然后将项目123(这里是用项目123演示的)里的printAB.c和PrintAB.h拷贝到项目PrintAB下:


在项目 PrintAB 中将 .h 文件移动到头文件文件夹中,然后找到该项目的属性页,在配置属性–>常规–>项目默认配置–>配置类型 一栏,选择静态库(.lib) ,应用,确认。


然后F7生成解决方案,可以看到生成了一个 PrintAB.lib 文件:


第三步:使用静态库

这个 .lib 文件打开之后是一堆乱码,对于人类而言是完全看不懂的,只有在代码中能使用它。 现在复制 PrintAB.lib 文件到项目123下并删除原有的PrintAB.c文件:


然后在项目123的test.c文件(也就是写有主函数的那个文件)里加上 #pragma comment(lib, “PrintAB.lib”) 以完成对lib文件的引用。此时编译并运行,运行成功!


可以看到,在项目123中已经没有了对函数PrintAB的定义,但是程序仍然跑起来了。在实际开发环境中,对外放出去的代码就是项目123中的代码,而属于自己的‘生产资料’则保存在自己本地。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值