做笔记用,大家勿睬
零(VS中关于scanf和gets等的安全问题)
vS2013中有很多函数的用法和书上讲述的不是特别一样,比如,scanf使用不了,要用scanf_s,还有的使用gets时,括号里面传参 时不光需要传入数组名,还需要传数组长 度,比如char arr[6];gets(arr,6);才可以正常的输入。原因是VS使用了更加安全的 run-time library routines.新的security CRT function(带有“_s”后缀的函数)。旧式的scanf在读取的时候会根据format指示 从缓冲区中读取直至结束,但是有些时候会format指示会有Bug,导致scanf读取了给定的缓冲区以外(数组越界)的数据。总之 带"_s"的是不带"_S"的安全版。需要注意的是,scanf_s,gets_s等是微软公司提供的,并不是标准C语言的知识,所以建议大家不要使用。
解决办法
1.更改预处理定义:
项目->属性->配置属性->C/C++ -> 预处理器 -> 预处理器定义,增加:
_CRT_SECURE_NO_DEPRECATE
2.打开VS的安装目录,一次打开文件夹VC->vcprojectitems,找到newc++file.cpp,右击以文本方式打开,在编辑页面输入#define _CRT_SECURE_NO_WARNINGS 1 ,以后每次新建一个项目的时候会自动生成该条语句
壹(编码风格)
编写项目的时候,每写一个模块,边测试边写代码,尽量避免代码太多时候,检查哪个模块不方便
贰(生成随机值)
srand():初始化随机数发生器 <stdlib.h>
rand():随机数发生器 <stdlib.h>
time():随机数 <time.h>
具体的使用方式:在主函数中用srand((unsigned)time(NULL)),然后使用int a = rand()%10 产生0-10的随机数
叁(printf中的格式控制符)
无符号的整型 %u 无符号的长整形%lu
肆(传址注意事项)
当传入一些地址(数组等),需要对地址内容进行改变,且需要返回首地址时,就另外定义一个新的临时变量,令其等于该地址,然后通过该临时 变量操作地址内容,同时原地址还不改变
伍(断言)
每传入一个地址到一个函数中时,注意断言,assert(地址),防止传址错误
陆(开辟临时空间)
1.每次使用molloc或者realloc时,注意使用if(!a){exit(0);}通过此方式防止开辟空间不成功。解释一下,int *a;a = (int*)malloco(sizeof(int)), 如果开辟空间不成功,则a指向错误,所以!a为真,然后跳入if语句,就直接退出了。
2.在数据结构中会经常使用删除一个节点的造作,每次我们删除一个节点的时候,注意使用free(a),把空间释放掉。
柒(对待一个具体问题的几点建议)
1.遇到一个问题时,注意把问题化简成一个小问题,通过解决小问题再解决大问题。
2.要联想到生活中的实例,比如我们逆置一个字符串的内容的时候,我们一般的做法是先把内容取出来,再反过来放进去,但是如果我们联想生活 中的实例的话,这就好比一队任排成一列,那我们生活中的做法只需要最前面一个和最后面一个调整位置,最前第二个和倒数第二个调整位置,以 此 类推,这样写程序是不是就会轻松很多。
3.遇到一个问题时,使用上面的一点点小建议,然后多想其他算法。
捌(const)
在定义一些变量或者一些变量的内容不允许修改的时候,适当的使用一些const。
玖 (Sleep)
Sleep(3000);
程序运行到这一句的时候就会停3秒钟。