C语言初阶(12)

news2025/2/24 23:26:05

1.调试的基本

调试是发现并解决C语言编译的bug的方法。

调试基本步骤是1.发现程序错误的存在 2.以隔离、消除等方式对错误进行定位 3.确定错误产生的原因 4.提出纠正错误的解决办法 5.对程序错误予以改正,重新测试

编译版本release和debug版本,release比较debug版本文件大小更加小和优化更加好是对用户发布的版本;debug是程序员的调试版本,对于程序员更加容易去检查和调试

vs编译器的调试快捷键

F10开始调试

F11进行单条语句(较F10调试更加详细)大多用于进入函数

F9用于设置断点

F5进行运行到断点上

Ctrl+F5开始运行代码

建议一个网站VS中常用的快捷键_vs快捷键-CSDN博客

查看程序的具体信息,先进入调试

上面不同的箭头代表了不同窗口

自动窗口时自动监视变量的值,全自动有可能会将不想要的值监视而会让想要监视的值取消

监视需要手动监视变量的值 

调用栈堆可以看到函数之间的调用关系

内存输入地址后就将显示地址对应的内容进行表现出来

 反汇编就是转到定义查看具体运行情况

总结:纸上得来终觉浅,绝知此事要躬行。实践是检验真理的唯一标准,只有我们在实践中不断的调试,我们才能运用调试解决一些真正的问题

2.编程的常见问题

(1)编译性错误

常见的语法错误,用编译器就能轻松识别

(2)链接性错误

编译器找不到未定义的函数或者是未声明的变量,编译器在编译时可以轻松识别。

(3)运行时错误

在运行时发生错误,编译器无法识别,程序员就要使用调试进行解决。

3.减少错误发生的技巧

(1) 使用assert

assert就是断言,如果assert库函数判断不通过就不执行下面代码,例如:

(2)尽量使用const

const修饰变量可以将他们无法修改,将一些变量拥有常量属性可以将变量防止修改,而对于指针变量进行const修饰,如果在*前面就是对指针指向的空间无法用指针修改,在*后面就是对指针无法修改;很容易理解*前面就是对变量指向的空间进行限定,后面就是对指针进行限定。如下图

(3)养成良好的编码风格

(4) 添加必要的注释

(5) 避免编码的陷阱

4.练习


 int main()
 {
     int i = 0;
     int arr[10] = {0};
     for(i=0; i<=12; i++)
    {
         arr[i] = 0;
         printf("%d ",i);
    }
 return 0;
 }

上面这个代码有越界访问,这个代码在VS编译时会进入死循环

由于在C语言在定义变量时会从高地址向低地址进行使用空间,在i变量和数组之间还有几个未利用的空间,数组地址是从高到低进行的这样越界时就有可能越界到i中,从而使i的值被修改,造成死循环。

编写my_strcopy的代码 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1979150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一例AutoHotkey语言生成的文件夹病毒分析

概述 这是一个使用AutoHotkey语言编写的文件夹病毒&#xff0c;使用ftp服务器来当作C2&#xff0c;通过U盘传播&#xff0c;样本很古老&#xff0c;原理也很简单&#xff0c;这种语言的样本还是第一次见到&#xff0c;记录一下。 样本的基本信息 PE32库: AutoIt(3.XX)[-]编译…

Cocos Creator2D游戏开发(11)-飞机大战(9)-cocos发布微信小游戏

准备工作: ① cocosCreator ②微信小游戏开发者工具 第一步: cocosCreator 打包编译,设置发布平台,默认场景,设备方向,AppId 最后点击构建 等待构建完成 第二步: 导入微信开发者工具 就是cocos Creator 中构建发布里面的发布路径 然后编译: 剩下的就是微信开发者工具…

Bootstrap框架介绍

1、Bootstrap框架的下载和使用 Bootstrap框架是基于HTML、CSS、JavaScript的CCS/HTML框架,是一种封装好的前端框架。它包括js、css、front字体样式库。该框架下载链接:https://v3.bootcss.com/getting-started/#download,并选择下载源码。 建一个BootstrapDemo文件夹,将js…

反激式电源为什么上电最容易烧MOS管?

大家好,这里是大话硬件。 这篇文章总结一下最近在研究的反激电源RCD吸收回路和VDS尖峰问题。这也是为什么MOS管在开机容易被电压应力击穿的原因。 下图是反激电源变压器部分的拓扑。 在MOS开通时,VDS上电压: 由于Rdson比较小,MOS开通时,VDS电压也较小。此时,MOS漏极电…

对象存储及其相关概念介绍

对象存储是一种用来描述解决和处理离散单元&#xff08;这些离散单元被称作为对象&#xff09;的方法的通用术语。以下是关于对象存储的详细解析&#xff1a; 一、基本概念 定义&#xff1a;对象存储&#xff0c;也叫做基于对象的存储&#xff0c;是一种将数据以对象的形式进…

【过题记录】8.4(robocom补题,网络流)

今天robocom国赛&#xff0c;因为一个bool函数忘记return 1而裂开(错失21分) 以此为戒 贪心消消乐 其实就是一个求最大子矩阵和的板子题 利用最大子段和的思想 枚举矩阵中的上下界 压成一维后利用最大子段和 O ( n ) O(n) O(n)处理 复杂度 O ( n 3 ∗ k ) O(n^3*k) O(n3∗k) k为…

VSCode开发Go的精准定位

下载Golang安装包 Download and install - The Go Programming Languagehttps://golang.google.cn/doc/install 安装完成后,配置go env go env -w GO111MODULE=on go env -w GOPROXY="https://goproxy.io,direct"

Maven介绍安装【后端 1】

Maven 入门与安装指南 引言 在Java开发领域&#xff0c;Maven作为一款强大的项目管理和构建工具&#xff0c;广受开发者喜爱。它不仅能够帮助我们管理项目依赖&#xff0c;还能统一项目结构&#xff0c;提供跨平台的自动化构建方式。本文将详细介绍Maven的基本概念、安装步骤以…

Face2V人脸向量开发包

Face2V SDK适用于需要人脸检测、人脸特征点和特征向量提取的应用&#xff0c;提供Web API和原生API。官方下载地址&#xff1a;Face2V SDK 。 1、目录组织 Face2V SDK开发包的目录组织说明如下&#xff1a; face2v_sdk | - core # 核心代码目录| -…

【算法】动态规划解决背包问题

应用场景——01背包问题 有一个背包&#xff0c;背包的容量为 4&#xff0c;现有如下物品 要求 1.目标为装入背包的总价值最大&#xff0c;并且重量不超出 2.要求装入的物品不能重复 动态规划算法介绍 1.动态规划算法的核心是&#xff1a;将大问题划分为小问题进行解决&…

函数调用的过程理解_汇编角度

目录 1、调用函数流程&#xff08;main函数调用print函数&#xff09;&#xff1a;Step1 保存main函数现场地址等信息Step2 跳转到print函数的位置Step3 执行print函数的指令Step4 返回main函数&#xff0c;执行下一条指令流程连续性总结 2、其他知识总结 1、调用函数流程&…

竞赛报名管理系统asp.net+sqlserver

竞赛报名管理系统 功能简单 内容单调 适合学习 asp.net 三层架构 sqlserver2022数据库 账号登陆注册 用户管理 克赛管理 竞赛报名 竞赛评分 公告维护 修改密码 新增竞赛 2019数据库版本低 附加不了 需要高版本数据库 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据…

24/8/4算法笔记 梯度下降

通过迭代地调整参数&#xff0c;沿着目标函数梯度的反方向&#xff08;即最陡峭的下降方向&#xff09;进行搜索&#xff0c;从而找到函数的局部最小值。 导入库 import matplotlib.pyplot as plt import numpy as np 构建方程和导数 #构建方程 f lambda x:(x-3.5)**2-4.…

代码随想录算法训练营第二天 | 209. 长度最小的子数组、59. 螺旋矩阵 II

目录 209. 长度最小的子数组1、题目描述2、思路3、code4、复杂度分析 LC59 螺旋矩阵 II1、题目描述2、思路3、code4、复杂度分析 209. 长度最小的子数组 题目链接&#xff1a;209 1、题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于…

Netty一

Netty Netty介绍 Netty应用场景 I/O模型 阻塞IO 同步非阻塞IO 异步非阻塞IO BIO NIO AIO对比 Netty线程模型 Reactor模式 单Reactor单线程 单Reactor多线程 主从Reactor多线程 Netty模型 异步模型 Future-Listener机制 TCP粘包拆包基本介绍 Netty内存使用 Netty内存池化 Netty…

PCB设计

PCB设计 一、 元件封装是什么&#xff1f; 元件封装&#xff1a;一是指元件的包装方式&#xff0c;二是指元件的焊盘形状与尺寸。 在绘制PCB板的时候&#xff0c;要保证元件封装绘制正确&#xff0c;否则元件很可能无法焊接到成品板上。 不同的厂家生产的各类元器件的形状、尺…

用uniapp 及socket.io做一个简单聊天app 5

聊天中的通知及好友申请&#xff1a; 如下图效果 聊天的效果&#xff1a; 这里的friends&#xff0c;好友例表&#xff0c;里面有相关代码&#xff1a; <template><view class"friends-container"><view v-if"!isLoggedIn" class"…

【资治通鉴】“ 将欲取之、必先予之 “ 策略 ① ( 魏桓子 割让土地 | 资治通鉴原文分析 | 道德经、周书、吕氏春秋、六韬 中的相似策略 )

文章目录 一、" 将欲取之、必先予之 " 策略1、魏桓子 割让土地2、资治通鉴原文分析 二、" 将欲取之、必先予之 " 类似的原理1、将欲败之&#xff0c;必姑辅之&#xff1b;将欲取之&#xff0c;必姑与之 - 周书2、将欲歙之&#xff0c;必固张之&#xff0c;…

24年第五届“华数杯”数学建模竞赛浅析

需要完整资料&#xff0c;请关注WX&#xff1a;“小何数模”&#xff01; 本次华数杯数模比赛的赛题已正式出炉&#xff0c;无论是赛题难度还是认可度&#xff0c;该比赛都是仅次于数模国赛的独一档&#xff0c;可以用于国赛前的练手训练。考虑到大家解题实属不易&#xff0c;…

24/8/4算法笔记 线性回归

在简单或多元线性回归中&#xff0c;最小二乘法用来估计模型参数&#xff0c;使得预测值与实际值之间的差异&#xff08;残差&#xff09;的平方和最小。 最小二乘法 导入代码包 import numpy as np Xnp.array([[1,1],[2,1]]) X 构建矩阵 ynp.array([14,10]) y linalg是线…