c/c++语言常见错误

针对C语言学习总结摘录,有些问题总是犯错。

1.for循环后面加“”,导致程序中断。

2.malloc失败,数组越界,访问非法内存,改变了类型,导致数组越界。

3.把赋值错当成等于,程序出错

4.segmentition fault 访问非法内存,数组越界,或者野指针,

5.搞清楚原理,不要抄写代码,认真检查代码,

6.字节对齐问题,pragma pack(1)  结尾要pragma pack()

7.字符串操作" ",表示空串,' '表示空字符,不要搞混

8.isdigit()判断是否数字,isalpha()

9.编程结构,设计模式

10.for (int i = n;i > 0;i++)//注意i是无符号的还是有符号的,有符号的话注意出错。

     for (int i = 0;i < n;i++)//这个不影响

11.写链表删除,插入,逆置,排序时,要定义一个伪头节点,才能操作第一个节点。

12.操作栈队列是,用到模板,栈的模板st.push(),st.pop,st.top,st.empty();队列的模板 que.front(),que.push(),que.pop(),

13.容器 vector 求容器里面的内容的长度时 vector <int>&A  int len = A.length();容器还可以排序sort(A.begin(),A.end())

14.字符串操作和字符操作要区分开,

15.二分法查找有序数组,找到则返回下标,没有则返回插入的位置。此时,定义结构体,递归与非递归,这里的递归一定要注意没有找到的时候判断插入的位置,而非递归的时候,判断退出,要加上break,否则无法退出。这里的理论与编程差距较大,要好好品味。

16.全排列的问题,采用递归,用树型遍历的方法做,定义另外一个数组brr,初始化全0,然后定义两个指针K,M,K的下标值为0,M的下标值为len-1,如果K= M,则打印数组arr,定义j,移动位置判断K,M的关系。这里要注意如果K=M的时候,要交换arr[j],arr[k]的值,返回初始状态,好进行下一次的排列。

17.子集的问题,和全排列类似,采用递归,用树型遍历思想,定义brr,初始化0,当brr为1时,表示此位置有值,为0表示没有值。1为左孩子,0为右孩子。

18.return 0,1,-1的区别:1.返回值 2.结束函数    return 0  1  是bool类型 ,1表示正确, 0表示错误                                                                                                                                                               return 0 -1 0是函数正常退出,-1函数异常退出,

19 NULL 和null  NULL其实是宏定义,有的编译器把0定义成NULL,宏一般为大写,小写null也可以                                                               nullptr  c++ 11 中的一个关键字,编译器支持的话,可以与NULL等价替换。

20." " 与 NULL 区别 " "表示分配内存空间,NULL表示没有分配空间

21.' '与" "区别字符串和字符    '\0'表示字符串结尾  '0'表示字符0

22.  break和continue的区别  

23.malloc和new的区别:malloc是函数,而new是调用

24.float c = 3.4;
    printf("%f\n",c);//3.4
    printf("%d\n",c);//特别大的数                                                                                                                                                               int g = (int)5.8;//显式转换 5
    char h = 100;
    char y = h+25;//隐式转换 125,y此时为4字节的整数    //但是sizeof都是1字节

25.操作系统机制:双重模式:由用户和操作系统共享计算机软硬件。用户执行代码可能引发错误,导致其他程序或者操作系统出错,因此,要有防错机制。因此必须区分用户代码和内核代码,大多数计算机采取硬件支持区分不同模式。用户和内核模式,双重模式执行提供保护手段,以便防止操作系统和用户程序受到错误用户程序的影响。 可能引起硬件错误的机器指令为特权指令,只能由内核控制,切换到用户态,I/O控制,中断管理等命令都为特权指令。用户态通过中断,陷阱,或者系统调用转换到内核态。系统调用为用户程序提供执行特殊权限的手段,请求操作系统执行。双重模式没有硬件支持,会有很大缺陷,没法检查模式错误,一个用户程序出错或者非法访问内存则通过硬件报错,中断,进而转换到内核模式。操作系统应该维持控制 CPU,防止用户程序陷入死循环,或不调用系统服务并且不将控制返给操作系统。

26.new关键字,在内置类型中,new[]只是分配内存,没有初始化,为随机值;但是在自定义类型中,new[]不管后面有无(),都会调用构造函数,初始化。

27.enum枚举类型在函数外定义,为全局变变量,初始化为0,而不是第一个变量的值。在函数内定义,为局部变量,为随机值。

28.数组传参时,会退化为指针,变为指针类型,同要传数组长度,数组长度在主函数得到,传参。

29.拷贝构函数是创建对象并初始化,赋值运算符重载是给已存在的对象给另一个对象赋值。

 

 

 

                                                                                

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C/C++语言编程安全子集是一种编程技术,旨在提供一种更加安全的编程方法,以减少程序中的安全漏洞和错误。 为了实现C/C++编程语言的安全子集,需要采取以下几个方面的措施: 1. 内存管理:C/C++语言在内存管理方面存在一些安全隐患,如内存泄漏、缓冲区溢出等。安全子集可以提供更加安全的内存管理工具或技术,如智能指针、内存安全检查等,以减少这些安全风险。 2. 输入验证:C/C++语言对用户输入的验证较弱,容易受到各种攻击,如SQL注入、缓冲区溢出等。安全子集可以提供更强大的输入验证工具或技术,如正则表达式、输入过滤等,以增强程序的安全性。 3. 安全函数:C/C++语言中存在一些不安全的函数,如strcpy()、sprintf()等,容易导致缓冲区溢出等安全问题。安全子集可以提供安全函数替代品,如strncpy()、snprintf()等,以减少这些安全风险。 4. 代码静态分析:安全子集可以提供代码静态分析工具,通过对程序的源代码进行分析,识别潜在的安全漏洞和错误,帮助程序员修复这些问题,提高程序的安全性。 5. 安全编码规范:安全子集可以提供安全编码规范,指导程序员编写安全的代码,包括如何处理用户输入、如何进行内存管理等,以减少程序中的安全漏洞。 总之,C/C++语言编程安全子集是一种通过采取各种措施来增强C/C++程序的安全性的编程技术。通过使用这种技术,程序员可以减少安全漏洞和错误,提高程序的可信度和鲁棒性。 ### 回答2: C/C++语言编程安全子集是指使用C/C++语言编写程序时,遵循一些规范和最佳实践,以确保程序的安全性和可靠性。下面是一些常见的C/C++语言编程安全子集的要点: 1. 错误处理:正确处理错误和异常,避免程序中断和崩溃。合理地使用try-catch语句块,及时捕获异常并进行必要的处理和恢复。 2. 输入验证:对所有输入数据进行验证和过滤,防止恶意输入和错误输入导致的安全漏洞。例如,使用正则表达式对输入进行格式检查,限制输入字符长度等。 3. 内存安全:合理地使用动态内存分配和释放操作,避免内存泄漏和缓冲区溢出。使用智能指针和RAII(资源获取即初始化)技术,确保资源的正确释放。 4. 安全算法和加密:在需要处理敏感数据或进行安全传输时,使用安全的算法和加密方法。例如,使用AES加密算法对数据进行加密,确保数据机密性和完整性。 5. 安全库函数:使用安全的库函数来替代不安全的函数,以减少安全漏洞的风险。例如,使用strncpy()代替strcpy(),使用snprintf()代替sprintf()等。 6. 安全编码规范:遵循安全编码规范,使用安全的编码风格和命名规则。例如,避免使用不安全的函数和不规范的变量命名,注重代码的可读性和可维护性。 7. 防止代码注入:对于用户输入的代码或数据,进行严格的验证和限制,避免恶意注入攻击。例如,使用参数化查询代替动态SQL查询,使用过滤器和白名单等。 总之,C/C++语言编程安全子集是一系列的安全编程准则和最佳实践,旨在保护程序免受常见的安全漏洞和攻击。开发人员应该积极采用这些准则,加强代码的安全性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值