突发奇想的想把自己最近的想法写一写。
按照部里大佬的要求,我应该是要每周写一份自我总结的,但从我的文章数量来看,从我的自我总结从word文档的形式转变为博客之后,我就只写了一篇自我总结。说实话,我已经两周没有写这个了,学长要求上交的时候我也没有补着写,因为我觉得没总结就是没总结,不能搞那些弄虚作假的东西去糊弄自己。上两周的周末我基本没在学习,上上周周末考完高数考试后我就与阔别已久的好哥们儿打了一个周末游戏,而上周末呢(其实就是两天前),我去了趟上海参加cp21漫展,于是又在上海愉快的度过了一个周末,连基本的课本都没翻一下,倒是抱着自己从cp21买回来的画册翻得不亦乐乎。
昨天晚上去参加了信安协会本学期最后一次培训,算是为这个活动暂时画上了一个句号。培训上大佬们主要讲了关于ctf的一些内容。ctf(capture the flag)是一种信息安全大赛,主要有web,re(逆向),pwn,misc,crypto等几个不同的方向。之前因为好奇所以就已经对ctf有所了解,不过具体的题目还没有自己尝试过(毕竟每天把心思放在烧hifi设备上了)。看了大佬们的演示之后,我似乎重新找回了不久前的那种学习状态。大佬们说要尽快找个方向入门,虽然我对每个方向都有兴趣,但明显全都学任务太重,不太可能做到,尤其是自己身上还背负着基础学科的考试任务,所以只找一个方向去钻研是比较合适的。就目前而言,我比较倾向于web和逆向这两个方向,原因如下:选web是因为web显然是这几个方向里最简单的,而且用途广,比如以后毕业以后可以帮助互联网公司检查漏洞等等。选逆向主要因为这个方向逼格比较高,通过逆向工程可以反向得到一些程序的算法和内在的思想,然后在让这些算法或思想为自己所用(比如写游戏外挂,向卢本伟一样科学吃鸡23333)。
总之不管哪个方向都得钻研,而且明显只会一个cpp是不够的,如果做这种题目还用cpp写程序就太磨叽了,别人都已经capture到flag了,你可能一个main函数都没写出来。所以我下一步的计划是在寒假里把python和c语言自学完,然后简单接触一下汇编语言。下面解释一下:放在寒假才自学的主要原因是现在已经接近期末了,而且四级考试近在眼前,在又要复习四级又要复习基础学科的情况下明显是无法进行自学的,只好把时间安排在无事可做的寒假。学python的原因就不多说了,python大法好。学c和汇编的原因是昨天做了两个逆向和misc的题目,其中用到的工具破解出来的源代码是用c语言和汇编语言写的(哈哈傻眼了吧),虽然已经学过cpp了,但cpp的语句和c 还是有不少区别的,要想完全看懂还是得去精学一下c语言,好在已经学了cpp,至少学起c来会轻松一些。汇编语言的话因为会出现,所以简单了解一下也好。然而这些都是后话了,现在的首要目标还是先搞定四级考试和期末考试(好在我英语学的还凑合,所以四级不是太担心)。
然后扯一件今天写程序时遇到的问题。今天写了两个类类型的程序,结果写其中一个的时候碰到了一个情况。
以下是我第一次写的源代码:
#include<cstring>
#include<iostream>
using namespace std;
class book
{
public:
void setbook(char*, double, int);
void display();
void borrow();
void restore();
private:
char bookname[50];
double price;
int number;
};
void book::setbook(char*name, double p, int n)
{
strcpy_s(bookname, name); /
price = p;
number = n;
}
void book::borrow()
{
if (number == 0) { cout << "we have no books" << endl; }
number = number - 1;
cout << "after borrowed, we still have " << number << " books" << endl;
}
void book::restore()
{
number = number + 1;
cout << "after restored, we have " << number << " books" << endl;
}
void book::display()
{
cout << "bookname:" << bookname << endl << "price:" << price << endl << "number:" << number << endl;
}
int main()
{
char flag, ch;
book lib;
lib.setbook("kara no kyokai", 150, 500);
lib.display();
ch = 'y';
while (ch == 'y')
{
cout << "do you want to borrow or restore(b/r):";
cin >> flag;
switch (flag)
{
case 'b':lib.borrow(); break;
case 'r':lib.restore();
}
cout << "continue? (y/n)";
cin >> ch;
}
lib.display();
return 0;
}
问题出在我打了一长串/的那一行,可以看到那一行的代码中我使用了strcpy_s这个语句进行了字符串内容的拷贝,但是当我使用学校电脑上安装的c++6.0调试的时候它给这一行代码报了错误,一开始我不知道怎么搞定,于是把strcpy_s中的_s删除了,结果系统不再报错了,程序也能正常运行。但是当我用vs2017调试该程序的时候并没有报错,而且程序也能正常运行,所以我心里就略有疑惑,我知道这可能是编译器的锅,但我还是想知道strcpy_s和strcpy间的区别。之后看了一下网上大佬们的解释,大概知道strcpy_s能保证有效的缓冲区尺寸,但不是很懂是什么意思,所以还得去好好了解一下。不过虽然遇到了问题,不过我明显感觉到现在写程序比以前更加得心应手了,可能是自己差不多入门了吧。这对我而言倒还算个好消息。
今天突发奇想的瞎扯淡就进行到这吧,这篇博客我不打算作为上周或这周的自我总结交给学长,因为也不算什么自我总结,只不过是晚自习上突然想写的一些东西罢了。
愿接下来的四级考试期末考试顺利。愿我自学python的过程顺利。
blablabla...........