韦凯峰Linux编程学堂
码龄17年
关注
提问 私信
  • 博客:909,281
    社区:1,361
    问答:2,216
    912,858
    总访问量
  • 300
    原创
  • 5,805
    排名
  • 2,258
    粉丝
  • 7
    铁粉
  • 学习成就

个人简介:一个Linux系统编程的布道者,讲述更多的Linux C/C++ 编程,Linux系统编程,Openwrt系统开发的知识。

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2007-11-27
博客简介:

LC的专栏

博客描述:
Linux系统编程的布道者,一起学习 Linux C/C++程序设计,Linux系统编程
查看详细资料
  • 原力等级
    成就
    当前等级
    5
    当前总分
    1,905
    当月
    5
个人成就
  • 博客专家认证
  • 获得758次点赞
  • 内容获得109次评论
  • 获得3,312次收藏
创作历程
  • 5篇
    2024年
  • 41篇
    2023年
  • 30篇
    2022年
  • 125篇
    2021年
  • 62篇
    2020年
  • 20篇
    2019年
  • 7篇
    2018年
  • 1篇
    2017年
  • 9篇
    2013年
  • 1篇
    2009年
成就勋章
TA的专栏
  • 软件编程百宝箱
    19篇
  • Linux 系统编程课程
    161篇
  • Linux C 程序设计课程
    195篇
  • Linux C++程序设计课程
    174篇
  • airplay协议开发
    3篇
  • 韦凯峰 NAT P2P 穿透通信
    5篇
  • Java
    5篇
TA的社区
  • Linux编程学堂
    2 成员 2 内容
    创建者
关注作者公众号,一起系统学习Linux编程
20210607161653464.jpg
❤扫码关注公众号❤
作者实时更新 Linux C/C++编程,Linux系统编程的动态!
关注公众号,获取编程学习资料!
一起迈进 Linux 编程学堂,走进计算机的世界!
用计算机改变自己,改变他人,改变生活!
❤欢迎来一起讨论学习❤
创作活动更多

AI大模型如何赋能电商行业,引领变革?

如何使用AI技术实现购物推荐、会员分类、商品定价等方面的创新应用?如何运用AI技术提高电商平台的销售效率和用户体验呢?欢迎分享您的看法

186人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

jansson数组创建解析

json 数组对象,也是一个普通的 json 对象,那么,可以调用 json_object_set_new() 函数 json 数组对象,添加到一个 json 中。韦凯峰Linux编程学堂,一瓶啤酒的价格,视频+文档,零基础入门,掌握Linux C/C++编程,Linux系统编程,用技术改变生活,改变自己,改变世界!然后,调用 json_array() 函数,创建一个 json 数组对象;首先,调用 json_object() 函数,创建一个 json 对象;//构建一个disk对象添加到数组;
原创
发布博客 2024.10.10 ·
276 阅读 ·
3 点赞 ·
0 评论 ·
9 收藏

jansson解析数据

韦凯峰Linux编程学堂,一瓶啤酒的价格,视频+文档,零基础入门,掌握Linux C/C++编程,Linux系统编程,用技术改变生活,改变自己,改变世界!json_array_get() --- 获取第 N 个数组元素,此时,数组元素是一个 json 对象;首先,调用 json_loads() 函数,加载一个 json 数据,得到一个 json 对象;然后,调用 json_object_get() 函数,获取对应的 json 对象;
原创
发布博客 2024.10.10 ·
439 阅读 ·
3 点赞 ·
0 评论 ·
7 收藏

openssl AES加密例子

韦凯峰Linux编程学堂,一瓶啤酒的价格,视频+文档,零基础入门,掌握Linux C/C++编程,Linux系统编程,用技术改变生活,改变自己,改变世界!//设置加密的秘钥;//AES 块到长度,是16个字节;printf("原始数据:
");printf("加密数据:
");printf("揭密数据:
");
原创
发布博客 2024.10.10 ·
300 阅读 ·
3 点赞 ·
0 评论 ·
8 收藏

AES算法分析

其中,i 是要扩充的第几个密钥数组,例如 128Bit的子密钥,是16个字节,每个4个字节分成一个组,有w(0), w(1), w(2), w(3),那么,开始扩展的时候,第一个w(i) 就是 i = 4。其中,i 是要扩充的第几个密钥数组,例如 128Bit的子密钥,是16个字节,每个4个字节分成一个组,有w(0), w(1), w(2), w(3),那么,开始扩展的时候,第一个w(i) 就是 i = 4。所以,执行XOR操作有可逆的运算。那么,总的密钥长度是加上初始提供的16个字节,就有192个字节。
原创
发布博客 2024.10.08 ·
992 阅读 ·
13 点赞 ·
0 评论 ·
15 收藏

P2P NAT穿透-提供在线申请免费ID

链接:https://pan.baidu.com/s/1WimMcHRhEX9Z_gC1grNkKQ?WKF P2P NAT穿透,发布 2.0 版本,提供在线申请免费ID使用;
原创
发布博客 2024.09.19 ·
128 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

韦凯峰Linux编程零基础学习系列 学习视频上线啦!

希望每一个零基础的同学,都可以掌握Linux编程。循序渐进、由浅入深、一步一个脚印,扎实掌握每一个编程技能。韦凯峰 Linux C/C++ 零基础编程学习系列, 从零基础入门、到提高、最后实践开发产品!《Linux C 程序设计》、《Linux C++程序设计》、《Linux 系统编程》程的技能,让读者的世界可以打开一展新的大门,进入计算机的世界!百度搜索:韦凯峰Linux编程、韦凯峰Linux编程学堂。我们在努力践行,做一个Linux编程的布道者!让读者可以零基础入门,掌握 Linux 系统编。
原创
发布博客 2023.10.25 ·
210 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

try-catch默认捕获所有异常

此时,抛出一个字符串。但是,在try-catch语句中,设置的catch捕获参数的int, double类型。那么,抛出的异常与捕获的异常信息类型不一致,所以,就没有进入对应的catch语句块中。但是,最终,会进入catch(...)语句块中,它会捕获所有的异常消息。在程序开发的过程中,我们可能会调用其他软件库,那么,在软件库中抛出异常时,我们无法知道异常的类型,那么,应该怎么样捕获?就是在catch语句的括号中,使用省略号,表示捕获所有异常的信息。cout
原创
发布博客 2023.02.10 ·
2242 阅读 ·
1 点赞 ·
1 评论 ·
4 收藏

C++ try-catch语法分析与应用

当throw抛出异常信息之后,首先中本函数中选择与之匹配的catch,如果在本函数中无try-catch结构或找不到与之匹配的catch,就转到其上一层去处理,如果其上一层也无try-catch结构,或找不到与之匹配的catch,则再转到更上一层的try-catch结构去处理,也就是说,总是转到离开出现异常最近的try-catch结构去处理。此时,如果throw抛出的异常信息是double类型的变量a,则catch在捕获异常信息a的同时,还使得d获得a的值,或者说d得到a的一个拷贝。什么时候需要这样做呢?
原创
发布博客 2023.02.10 ·
5375 阅读 ·
3 点赞 ·
0 评论 ·
28 收藏

C++异常处理方法

如果在每一个函数中都设置处理异常的程序段,会使程序过于复杂和庞大,因此,C++采取的办法是:如果在执行一个函数过程中出现异常,可能不再本函数中处理,而是发出一个消息,传给它的上一级(即调用它的函数),它的上级捕捉到这个信息后进行处理。总的来说,这种错误是比较容易发现和校正的,因为,它们一般都是有规律的,在有了一定的编译经验以后,可以很快地发现出错的位置和原因并加以改正。人们希望程序不仅在正确的情况下能够正确运行,而且,程序出错的情况下,也能够作出相应的处理,而不致使程序莫名其妙地终止,甚至出现死机的现象。
原创
发布博客 2023.02.10 ·
606 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

C++模板参数类型列表

此时,对应设置T = int, TString = char*, C = double。然后,再实例化一个test类,再去定义对象。我们学习了模板函数和模板类的定义和使用。但是,看到的“类型形参表”都只有一个元素,那么,如果要定义多个类型,应该怎么样操作?在telplate中,“类型形参表”可以定义多个类型,类型直接使用逗号“,”分隔。每个类型之间,使用逗号分隔。此时,在模板函数或者模板类中,可以有多个动态绑定的类型。
原创
发布博客 2023.02.10 ·
1105 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++模板类使用

模板类提供了一个机制:让用户为类定义一个类的模板。就是说,类的定义中,使用的某些数据类型,是在类定义对象的时候,才动态设置。可以看到,我们定义了一个模板类test,在模板类test中使用的形参类型由T符号表示。这个“动态绑定”与模板函数一样,模板函数中是的数据类型,在函数的实际调用中才确定类型。所有,在定义模板类对象的时候,给模板类设置具体的类型。函数类型 类模板名::成员函数名(函数形参列表)定义模板类之后,可以使用模板类来定义一个对象。类模板名 对象名;
原创
发布博客 2023.02.10 ·
401 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

C++模板函数使用

函数模板可以增加代码重用率,它使用非特定类型定义类和函数,到实际调用函数的时候,再用特定的类型代替它们。所以,我们用模板函数的技术,优化上面重载的my_max()函数。那么,在调用一个模板函数的时候,根据传递给模板函数的参数类型,才确定T1,T2,T3表示的类型,才定义一个具体的函数。参数是一个int类型,所以,对应 my_max(T x, T y);所以,模板函数中的类型参数,是根据函数的实际调用,再确定参数类型。那么,在my_max()模板函数的实际调用中,根据操作数据的类型,再决定T是那个数据类型。
原创
发布博客 2023.02.10 ·
469 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++模板定义

由于模板可以实现逻辑相同,数据类型不同的程序代码的复制,所以,使用模板机制可以减轻编程和维护的工作量和难度,模板一般分为模板函数和模板类。在学习函数的重载时,我们可以定义一个同名函数,但是,函数的形参列表不一样,那么,就定义了重载函数。那么,重载的这三个my_max()同名函数,函数的定义基本一样,只有函数的返回值类型和参数类型不同,那么,有什么办法可以简化这些函数的定义?才形成一个具体的函数,由程序调用。此时,定义对象的时候,在中指定具体的类型,构建一个具体的类,然后,再用该类来定义对象。
原创
发布博客 2023.02.10 ·
182 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++命名空间应用

那么,在C++语言中,支持的了“命名空间”的机制,可以把我们编写的代码封装到一个命名空间中,当我们想使用其中的代码时,该命名空间就可以了。那么,我们一般的解决方法是定义成不同的类名,例如程序员A定义的类是string_A,,程序员B定义的类是string_B,这样,够避免类名相同产生的冲突。所以,我们同时引入wkf, std命名空间,那么,wkf命名空间中定义的max()函数与std命名空间中定义的max()函数同名。函数,已经在系统中定义过来,包含着系统定义的 std 命名空间中。
原创
发布博客 2023.02.10 ·
226 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

C++ using导入命名空间

上面我们学习了通过“域作用符”对命名空间代码的引用,但是,当程序集成了多个命名空间的代码,每次调用函数的时候,需要拼写命名空间的名称,这样的引用比较麻烦。那么,在引用命名空间内的变量和函数,就可以不用域作用符来指定命名空间。这样的代码编写,就比较符合正常的代码开发。所以,当我们需要导入一个命名空间的大量代码,就可以使用using关键字来导入命名空间。那么,C++引入using关键字,可以导入一个命名空间。//引用snB命名空间;5 通过using导入命名空间。
原创
发布博客 2023.02.10 ·
327 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

C++通过域作用符引用命名空间

由于这些同名变量和同名函数是定义在不同的命名空间中,所以,不会引起冲突。那么,当我们需要引用这些变量和函数的时候,可以通过域作用符“::”来访问。例如snA::func()就表示使用snA命名空间内func()函数。可以看到,我们定义了命名空间snA, snB,然后,在这些命名空间中都定义了同名的变量val和同名函数func()。学习了命名空间的定义,举例对命名空间的使用。4 通过域作用符引用命名空间。
原创
发布博客 2023.02.10 ·
166 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++命名空间定义和使用

namespace 是定义命名空间所必须写的关键字,wkf_sn是用户自己指定的命名空间的名字(可以用任意合法标识符,这里用 wkf_sn是因为 ns 是 namespace 的缩写,含义清楚),中花括号内是声明块,在其中声明的实体称为命名空间成员(namespace member)。C++中命名空间的作用类似于操作系统中的目录和文件的关系,由于文件很多,不便管理,而且容易重名,于是,人们设立若干子目录,把文件分别放到不同的子目录中,不同子目录中的文件可以同名。最终,通过定义类对象,可以调用相同的函数名。
原创
发布博客 2023.02.10 ·
1070 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

C++抽象类

那么,这种不用来定义对象而只作为一种基本类型用作继承的类,称为:抽象类(abstract class),由于它常用作基类,通常称为“抽象基类(abstract base class)”。这个animal基类不是一个具体的动物,它不可以定义对象,只有从animal类派生出来的派生类才可以定义对象。如果在抽象类所派生出的新类中对基类的所有纯虚函数进行了定义,那么,这些函数就被赋予了功能,可以被调用。当派生类成为具体类之后,就可以用这种指针指向派生类对象,然后,通过该指针调用虚函数,实现多态性的操作。
原创
发布博客 2023.02.10 ·
272 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

C++纯虚函数

就是说,基类animal把一个动物的属性和行为都定义好,然后,派生类根据自己派生的动物,再定义不同的属性和行为。那么,基类只需要提供函数的声明,派生类再定义函数的具体实现。在派生类中对此函数定义后,它才能具备函数的功能,可以被调用。纯虚函数是在声明函数的时候,被“初始化为0”的函数。定义了dog对象,然后,销毁对象的时候,调用了dog的析构函数,再调用dog继承的基类animal的析构函数。如果在一个类中声明了纯虚函数,而在其派生类中没有对该函数定义,则该虚函数在派生类中仍然为纯虚函数。
原创
发布博客 2023.02.10 ·
235 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

C++虚析构函数

当基类的析构函数为虚函数的时候,无论指针指向的同一族类中的哪一个类对象,当对象撤销的时候,系统会采用动态关联,调用相应派生类的析构函数,对该对象进行清理工作。专业人员一般都习惯声明虚析构函数,即使基类并不需要析构函数,也显式地定义一个函数体为空的虚析构函数,以保证在撤销动态存储空间时能够得到正确的处理。当派生类的对象从内存中撤销的时候,一般先调用派生类的析构函数,然后,再调用基类的析构函数。那么,这样的操作就会导致错误。那么,看到这个特性,我们良好的编程习惯应该是:所有的类析构函数,都声明为虚函数。
原创
发布博客 2023.02.10 ·
198 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多