stdio,网络安全开发进阶吃透这一篇必拿60W年薪

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文


大致翻译了一下,如下:

经常看到有建议说要使用 #include 代替  #include stdio.h,但很少有人提及这将把所有的symbol放进std namespace,而非 global namespace.这样,就必须写成std::printf(…)(注意是必须,但有的编译器却能通过,具体解释见下面),简单的写成printf是不行的。

这对于以下的有文件同样:cassert ciso646 csetjmp cstdio ctime cctype climits csignal cstdlib cwchar cerrno clocale cstdarg cstring cwctype cfloat cmath cstddef.
这在ISO 14882 in footnote 160:中有明确说明:

The “.h” headers dump all their names into the global namespace, whereas the newer forms keep their names in namespace

std. Therefore, the newer forms are the preferred forms for all uses except for C++ programs which are intended to be strictly compatible

with C.

也就是:".h"头文件将所有名字放在global namespace中,在新的方式下(指的是诸如cstdio这样的头文件),名字是放在namespace std中的。因此,新的方式是所有应用推荐的方式,除非是要编写与C严格兼容的程序。

许多编译器不能完全正确地实施这个规则,在使用新的header时,将所有的名字放入两个namespace。但因为这是不正确的,所以在以后很可能会改变(编译器会有所优化),这意味着你现在写的代码在新的编译器上可能会出错,因为它们更接近于新的标准。

许多编译器连一个warning都不能给出(即使是在最高warning级别下),比如当你写一个void main()时,许多编译器都不会给出warning,即使标准明确指出main函数必须返回int型数据。

C++标准委员会的成员Nathan Myers写了一篇关于header strategy文章:http://www.cantrip.org/cheaders.html

小结:

  1. 在C++下,若要使用C中已有库中的函数如stdio,文件包含方式为前面加一个c,同时去掉.h后缀,如#include ,同时必须加上using namaspace;对于其他类似的函数同样;
  2. 对于C++特有的库,直接用去掉.h后缀的文件包含,并加上using namaspace;

VS2010下实例分析:

针对上面的讨论,在VS2010下,用一段小代码测试

在C++中,若要使用printf,我们知道该函数在C中是在stdio中包含的

文件包含写法1(标准C++风格,推荐):

对于C++,标准的写法如下

复制代码

 1 #include <cstdio>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int a = 16;
 7 
 8     printf("%d\n",a);
 9 
10     return 0;
11 }

复制代码

编译,没有waring,没有error,运行可正确输出。

文件包含写法2(旧式C风格,不推荐,且在VS2010下编译出错):

C标准的写法,如下:

1 #include <stdio.h>

但是在VS2010下编译,会报错找不到该头文件:Cannot open include file: ‘cstdio.h’: No such file or directory

疑问:根据上面的解释,虽然写的是C++的代码,但是这样写也可以,是标准支持的,只不过标准推荐用第一种写法。此处为何编译出错,原因未知???

文件包含写法3(错误的写法,但是大多数编译器不活给出waring或error,仍可编译通过,在以后的编译器下可能会出错,强烈不推荐):

但如果文件包含去掉using namespace std;,即写成:

1 #include <cstdio>

编译,运行结果与文件包含写法1完全一样,没有任何warning。这就是上面所说的许多编译器不能完全正确地实施这个规则,在使用新的header时,将所有的名字放入两个namespace。在以后的编译器下可能会出错

疑问:使用printf函数,包含iostream也可以???

我们知道printf对于C而言,是包含在stdio中的,对于C++则是在cstdio中的,但是奇怪的是,我在VS2010下,只包含iostream,如下:

1 #include <iostream>

居然也可正确编译、运行,原因未知,可能还是类似于文件包含写法3的原因,编译器没有很好的处理C与C++的文件包含问题。

在iostream中并没有包含printf函数,为何可正确使用printf???

同样地,写成

1 #include <iostream>
2 using namespace std;

但是,若要使用cout、cin等iostraem中真正包含的函数,就必须加上using namespace std;的声明,而不能只写#include ,如下:

复制代码

 1 #include <iostream>
 2 //using namespace std;
 3 
 4 int main()
 5 {
 6     int a = 16;
 7 
 8     //printf("%d\n",a);
 9     cout<<a<<endl;
10     return 0;
11 }

复制代码

会提示没有声明cout、endl:error C2065: ‘cout’ : undeclared identifier


C++头文件包含何时要加.h,何时不加.h,何时在前面加c?

C++中不要#include <iostream.h>,不要#include <string.h>,因为它们已经被C++标准明确的废弃了,请改为 #include 和 #include .规则就是:

a. 如果这个头文件是旧C++特有的,那么去掉 h后缀,并放入std名字空间,

比如 iostream.h 变为 iostream.

因此,若要使用iostream库中函数,文件包含为

#include
using namespace std;

若只写#include ,而没有using namespace std;,会报错:error C2065: ‘cout’ : undeclared identifier,因为cout是在std中命名的,必须加上using namespace std;

可能在早期的编译器中,也支持#include <iostream.h>,可不用写using namespace std,但用VS2010编译,会报错Cannot open include file: ‘iostream.h’: No such file or directory。

b. 如果这个头文件是C也有的,那么去掉 h后缀,增加一个c前缀,比如 string.h

变为 cstring;stdio.h 变为 cstdio, 等等


Cplusplus的网站:http://www.cplusplus.com/reference/cstdio/

C library to perform Input/Output operations

Input and Output operations can also be performed in C++ using the C Standard Input and Output Library (cstdio, known as stdio.h in the C language). This library uses what are called streams to operate with physical devices such as keyboards, printers, terminals or with any other type of files supported by the system. Streams are an abstraction to interact with these in an uniform way; All streams have similar properties independently of the individual characteristics of the physical media they are associated with.


下面来自百度百科:

**cstdio是将stdio.h的内容用C++头文件的形式表示出来。**stdio.h是C标准函数库中的头文件,即:standard buffered input&output。提供基本的文字的输入输出流操作(包括屏幕和文件等)。由于C语言并没有提供专用于文字输入输出的关键字,所以该库是最普遍的C语言程序加载库。

stdio.h是以往的C和C++的头文件,cstdio是标准C++(STL),且cstdio中的函数都是定义在一个名字空间std里面的,如果要调用这个名字空间的函数,必须得加std::或者在文件中声明use namespace std。

Visual Studio 2012 - Visual C++

定义在标准C库头stdio.h传统上定义的宏。

#if

#include <stdio.h>

#undef clearerr

#undef feof

#undef ferror

#undef getc

#undef getchar

#undef putc

#undef putchar

namespace std {

using ::fclose;

using ::feof;

using ::ferror;

using ::fflush;

using ::fgetc;

using ::fgetpos;

本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。

最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。

最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。

学习路线图

其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。

相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。

网络安全工具箱

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-SEE2KpIT-1713178260298)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值