首页 编程 软件学院 查看内容

新手学编程遇见一代黑客大神凯文.米特尼克

2016-4-17 13:34 1829 0

摘要: 写了好几篇新手文章了,重申一次,我写的文章不是彻底的初学教程。相对初学C的教程,我的文章没有它们那么详实,并且会穿插一些故事。这个你在国内教程是找不到的,当然我写的文章里面的代码都是我自己写的,其他地 ...

 写了好几篇新手文章了,重申一次,我写的文章不是彻底的初学教程。相对初学C的教程,我的文章没有它们那么详实,并且会穿插一些故事。这个你在国内教程是找不到的,当然我写的文章里面的代码都是我自己写的,其他地方也没有。新手学得云里雾里,但如果你有兴趣了,那说明就对了! 一切的学习都是因为兴趣,没有兴趣支持,不过一个月你就松懈了。然后会问,学C有用吗?并且遇到一些问题喜欢耿耿于怀,就比如微信公号有的新手同学在自己的终端遇到ifconfig输入后居然没结果,于是就怀疑是不是我说的是错的,或者手机有问题?然后有去root手机。当然这样喜欢折腾固然是好,但是玩计算机或者手机的高手都知道,凡事都不是绝对的。你的手机ifconfig不出结果,可能就是手机系统屏蔽掉了。你目前没有能力去让它打开,因为是底层决定了环境。 10个新手学编程,有8个会半途而废,还有1个已经在放弃的路上,只剩下1位能走到最后。学会一些技能! 新手首先要了解到,计算机是一门科学技术,不是街边的贴膜,学一周就会就成高手了。程序员需要花大量的时间来提高自己的能力,就跟围棋高手一样,如果你不是天才,怎么可能一周从初段就升到9段!你不是智能机器人,不是AlphaGo,你是人,你受到局限了。经验其实是人最重要的东西,不能一触而就。 要想坚持到最后,能够成为哪一个有技能的人,成为高手!你现在学的C,用的地方太多了。你看到的AlphaGo机器人就有C代码,你现在在优酷放的视频,它底层的解码编码以及微信上的短视频的播放录制,你以为用什么语言?他们都是C!就是从这些最基本的逻辑编写出来的。长的C项目有几百万行代码,你现在写的最长的一段代码可能就是100行。学C是通向大神之路!毋庸置疑。 要学好,要有兴趣,要有一个偶像! 兴趣,没有任何道理可言! 我记得小学六年级的时候,我哥给我讲世界第一黑客凯文.米特尼克的故事,我对黑客精神充满敬意,对凯文充满崇拜。他年纪轻轻进入北美防护指挥中心仿佛入无人之境,一根电话线就能黑掉学校的系统,FBI找了他多年都杳无音信。当他最后被日本籍天才下村抓到的时候,全世界的黑客要求无罪释放凯文米特尼克。因为它仅仅是因为兴趣才入侵系统,并没有给别人带来什么损害。这是最纯正的黑客,仅仅因为兴趣。我小的时候听到这个故事,对黑客充满敬畏,这也是引导我不断前进,一直不放弃的根源。这是一种信仰。 现在的黑客已经被利益冲昏,没有了实实在在的仅仅为了技术突破的人。有的只是利益,黑色产业链,我们国家如此,其他国家也是如此,所以微信公号有很多人想学黑客技术,我也只有笑笑不了了之。 一个有技术但没有道德的人和一个有道德但没有技术的人,你选谁? 我肯定选择后者! 如果你找到了一个偶像,那么前行之路将简单多了。至少你会坚持到最后,成为有一技之能的人。 好,我们继续编程内容。 字符,字符数组,字符指针,什么乱七八糟的。比如一个文件路径,怎么在程序中表达,我们可以用这样的: char *fileName="/sdcard/hello.txt"; 也可以这样char fileName2[100]={"/sdcard/hello.txt"}; 因为有文件路径了,我们才可以打开文件,或者执行文件。路径又分为相对路径和绝对路径,什么是相对路径,就比如hello.txt就是相对路径,绝对路径是从头到尾完整地就是绝对路径,上面的路径就是绝对路径。 我们用程序演示下字符串,字符串和数字是不一样的,虽然字符说到底也是二进制,但是所表现出来的你能看到的肯定和二进制不一样了。字符本质上讲也是整型,因为有一张表对应着各个符号,这个表叫ASCII码! 如下图: 从图中我们看到,小写字母a对应的ASCII码值是97,大写的A对应的就是65,这些字符对应的整数都编号好的。 如果你不知道某个字母对应的ASCII码是多少,也可以编写代码打印出来看看: #include int main() { char test='c"; printf("%d",test); //注意是%d,不是%c,这样就打印它的ASCII码值了。 return 0; } 说得再本质一点就是,所有字符在计算机中都有与之相对应的二进制映射,机器虽然是只认识二进制,但是人类发明了映射关系,也就同等于认识人类语言了。 这个就是各个语言得以变得进化成更高级语言的原因,就拿C++来说,C++是基于C,但是C++做了更多其他高级复杂数据结构的拓展,比如搞出了类这个东西。其实也是数据封装,还原各个函数,属性回去,把对应的函数映射到更基本的数据,那还是二进制。 最后,我们需要思考下面的长串代码了: #include int main() { char kevinA[] = { "Kevin David Mitnick" }; //这样的初始化,最后默认加\0,但是不算入长度 char *kevinB = "Kevin David Mitnick"; //char型的指针 char kevinC[] = { 'K','e','v','i','n',' ','D','a','v','i','d',' ','M','i','t','n','i','c','k' }; //一个字符一个字符的方式放入数组中。 //输出字符串A printf("字符串A:%s 长度:%d\n", kevinA,sizeof(kevinA)); //输出字符串B printf("字符串B:%s 长度:%d\n", kevinB, sizeof(kevinB)); //输出字符串C printf("字符串C:"); for (int i = 0; i < sizeof(kevinC) / sizeof(kevinC[0]); i++) { printf("%c", kevinC[i]);//输出字符数组的每一个字符 } printf(" 长度:%d\n", sizeof(kevinC)); //换行 //===========对比一下他们的长度,思考为什么不同================= //========用函数strlen计算字符串的长度======================= //=====KevinA===== printf("KevinA length:%d\n",strlen(kevinA)); //==KevinB= printf("KevinB length:%d\n",strlen(kevinB)); //=kenvinC printf("KevinC length:%d\n",strlen(kevinC)); //操作 char vjiazhi[]={"微价值公号vjiazhi"}; char *result1=strcat(kevinA,vjiazhi); printf("result1:%s\n",result1); char *result2; result2=strcat(kevinB,vjiazhi); printf("result2:%s==compare:%d\n",result2,strcmp(result1,result2)); printf("%d\n",(result1==result2)); char result3[100]; strcpy(result3,result1);//复制到result3 printf("result3:%s",result3); return 0; } 结果差不多如下: 上面新遇到的函数是strlen,strcpy,strcmp,strcat,都是对字符串的操作,第一个strlen就是看这个字符串有多长,strcpy就是复制字符串,strcmp是比较两个字符串的大小,strcat是连接连个字符串。 具体函数怎么调用,什么是函数,我们后面的内容会讲到。更多以前新手文章,请关注下面的微信公号。 文章只是引导,不是教程,不负责一步步教学。(写文章好难啊,一篇写3个小时,还要写代码找图片,花太多时间了) 作者:谋哥,微信公号vjiazhi,略懂技术,产品,运营。


作者:头条号 / 微价值网
链接:http://toutiao.com/a6260725357830635777/
来源:头条号(今日头条旗下创作平台)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花
1

鸡蛋

刚表态过的朋友 (1 人)

  • 鸡蛋

    匿名

最新评论

返回顶部