地图制作网站小程序定制开发和模板有什么区别

news/2025/9/28 12:39:34/文章来源:
地图制作网站,小程序定制开发和模板有什么区别,幼儿保育专业建设规划,无锡开发公司大家好#xff0c;我是写代码的篮球。计算机专业的小伙伴#xff0c;在学校期间一定学过 C 语言。它是众多高级语言的鼻祖#xff0c;深入学习这门语言会对计算机原理、操作系统、内存管理等等底层相关的知识会有更深入的了解#xff0c;所以我在直播的时候#xff0c;多次… 大家好我是写代码的篮球。计算机专业的小伙伴在学校期间一定学过 C 语言。它是众多高级语言的鼻祖深入学习这门语言会对计算机原理、操作系统、内存管理等等底层相关的知识会有更深入的了解所以我在直播的时候多次强调大家一定要好好学习这门语言。但是即使是最有经验的程序员也会写出各种各样的 Bug。本文就盘点一下学习或使用 C 语言过程中非常容易出现的 5 个 Bug以及如何规避这些 Bug。这篇文章主要面向初学者老鸟可以忽略哈其实不少老鸟依然还会犯这些低级错误哦~1. 变量未初始化当程序启动时系统会给它自动分配一块内存程序可以用它来存储数据。所以如果你在定义一个变量时在未初始化的情况下它的值有可能是任意的。但这也不是绝对的有些环境就会在程序启动时自动将内存「清零」因此每个变量默认值都是零。考虑到可移植性最好要将变量进行初始化这是一名合格软件工程师应该养成的好习惯。我们来看下下面这个使用几个变量和两个数组的示例程序#include stdio.h #include stdlib.hint main() {int i, j, k;int numbers[5];int *array;puts(These variables are not initialized:);printf(  i  %d\n, i);printf(  j  %d\n, j);printf(  k  %d\n, k);puts(This array is not initialized:);for (i  0; i  5; i) {printf(  numbers[%d]  %d\n, i, numbers[i]);}puts(malloc an array ...);array  malloc(sizeof(int) * 5);if (array) {puts(This malloced array is not initialized:);for (i  0; i  5; i) {printf(  array[%d]  %d\n, i, array[i]);}free(array);}/* done */puts(Ok);return 0; }这段程序没有对变量进行初始化所以变量的值有可能是随机的不一定是零。在我的电脑上它的运行结果如下 These variables are not initialized:i  0j  0k  32766 This array is not initialized:numbers[0]  0numbers[1]  0numbers[2]  4199024numbers[3]  0numbers[4]  0 malloc an array ... This malloced array is not initialized:array[0]  0array[1]  0array[2]  0array[3]  0array[4]  0 Ok从结果可以看出i 和 j 的值刚好是 0但 k 值为 32766。在 numbers 数组中大多数元素也恰好是零除了第三个4199024。在不同的操作系统上编译这段相同的程序运行的结果有可能又是不一样的。所以千万不要觉得你的结果就是正确唯一的一定要考虑可移植性。例如这是在 FreeDOS 上运行的相同程序的结果These variables are not initialized:i  0j  1074k  3120 This array is not initialized:numbers[0]  3106numbers[1]  1224numbers[2]  784numbers[3]  2926numbers[4]  1224 malloc an array ... This malloced array is not initialized:array[0]  3136array[1]  3136array[2]  14499array[3]  -5886array[4]  219 Ok可以看出来运行的结果跟上面几乎是天差地别。所以对变量进行初始化将为你省去很多不必要的麻烦也便于将来的调试。2. 数组越界在计算机世界里都是从 0 开始计数但总有人有意无意忘记这点。比如一个数组长度为 10 想要获取最后一个元素的值总有人用 array[10] ……别问问就是我写过……新手朋友犯这种低级错误特别多。我们来看下数组越界会发生什么。#include stdio.h #include stdlib.hint main() {int i;int numbers[5];int *array;/* test 1 */puts(This array has five elements (0 to 4));/* initalize the array */for (i  0; i  5; i) {numbers[i]  i;}/* oops, this goes beyond the array bounds: */for (i  0; i  10; i) {printf(  numbers[%d]  %d\n, i, numbers[i]);}/* test 2 */puts(malloc an array ...);array  malloc(sizeof(int) * 5);if (array) {puts(This malloced array also has five elements (0 to 4));/* initalize the array */for (i  0; i  5; i) {array[i]  i;}/* oops, this goes beyond the array bounds: */for (i  0; i  10; i) {printf(  array[%d]  %d\n, i, array[i]);}free(array);}/* done */puts(Ok);return 0; }请注意程序初始化了数组 numbers 所有元素的值0~4但是越界读取了第 0~9 元素的值。可以看出来前五个值是正确的但之后鬼都不知道这些值会是什么This array has five elements (0 to 4)numbers[0]  0numbers[1]  1numbers[2]  2numbers[3]  3numbers[4]  4numbers[5]  0numbers[6]  4198512numbers[7]  0numbers[8]  1326609712numbers[9]  32764 malloc an array ... This malloced array also has five elements (0 to 4)array[0]  0array[1]  1array[2]  2array[3]  3array[4]  4array[5]  0array[6]  133441array[7]  0array[8]  0array[9]  0 Ok所以大家在写代码过程中一定要知道数组的边界。像这种数据读取的还好如果一旦对这些内存进行写操作直接就 core dump 3. 字符串溢出在 C 编程语言中字符串是一组 char 值也可以将其视为数组。因此你也需要避免超出字符串的范围。如果超出则称为字符串溢出。为了测试字符串溢出一种简单方法是使用 gets 函数读取数据。gets 函数非常危险因为它不知道接收它的字符串中可以存储多少数据只会天真地从用户那里读取数据。如果用户输入字符串比较短那很好但如果用户输入的值超过接收字符串的长度则可能是灾难性的。下面我们来演示一下这个现象#include stdio.h #include string.hint main() {char name[10];                       /* Such as Beijing */int var1  1, var2  2;/* show initial values */printf(var1  %d; var2  %d\n, var1, var2);/* this is bad .. please dont use gets */puts(Where do you live?);gets(name);/* show ending values */printf(%s is length %d\n, name, strlen(name));printf(var1  %d; var2  %d\n, var1, var2);/* done */puts(Ok);return 0; }在这段代码里接收数组的长度为 10 所以当输入数据长度小于 10 的话程序运行就没问题。例如输入城市 Beijing 长度为 7 var1  1; var2  2 Where do you live? Beijing Beijing is length 7 var1  1; var2  2 Ok威尔士小镇 Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch 是世界上名字最长的城市这个字符串有 58 个字符远远超出了 name 变量中可保留的 10 个字符。如果输入这个字符串其结果是程序运行内存的其它位置比如 var1和var2 都有可能被波及var1  1; var2  2 Where do you live? Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch is length 58 var1  2036821625; var2  2003266668 Ok Segmentation fault (core dumped)在中止之前程序使用长字符串覆盖内存的其他部分。请注意var1 和 var2 不再是它们的起始值 1 和 2 。所以我们需要使用更安全的方法来读取用户数据。例如getline 函数就是一个不错的选择它将分配足够大的内存来存储用户输入因此用户不会因输入太长字符串而意外溢出。4. 内存重复释放良好的 C 编程规则之一是如果分配了内存就一定要将其释放。我们可以使用 malloc 函数为数组和字符串申请内存系统将开辟一块内存并返回一个指向该内存起始地址的指针。内存使用完毕后我们一定要记得使用 free 函数释放内存然后系统将该内存标记为未使用。但是这个过程中你只能调用 free 函数一次。如果你第二次调用 free 函数将导致意外行为而且可能会破坏你的程序。下面我们举个简单的例子#include stdio.h #include stdlib.hint main() {int *array;puts(malloc an array ...);array  malloc(sizeof(int) * 5);if (array) {puts(malloc succeeded);puts(Free the array...);free(array);}puts(Free the array...);free(array);puts(Ok); }运行此程序会导致第二次调用 free 函数时出现 core dump 错误malloc an array ... malloc succeeded Free the array... Free the array... free(): double free detected in tcache 2 Aborted (core dumped)那么怎么避免多次调用 free 函数呢一个最简单的方法就是将 malloc 和 free 语句放在一个函数里。如果你将 malloc 放在一个函数里而将 free 放在另一个函数里那么在使用的过程中如果逻辑设计不恰当都有可能出现 free 被调用多次的情况。5. 使用无效的文件指针文件是操作系统里一种非常常见的数据存储方式。例如您可以将程序的配置信息存储在名为 config.dat 文件里程序运行时就可以调用这个文件读取配置信息。因此从文件中读取数据的能力对所有程序员都很重要。但是如果你要读取的文件不存在怎么办在 C 语言中要读取文件一般是先使用 fopen 函数打开文件然后该函数返回指向文件的流指针。如果您要读取的文件不存在或您的程序无法读取则 fopen 函数将返回 NULL 。在这种情况下我们仍然对其进行操作会发生什么情况我们一起来看下#include stdio.hint main() {FILE *pfile;int ch;puts(Open the FILE.TXT file ...);pfile  fopen(FILE.TXT, r);/* you should check if the file pointer is valid, but we skipped that */puts(Now display the contents of FILE.TXT ...);while ((ch  fgetc(pfile)) ! EOF) {printf(%c, ch);}fclose(pfile);/* done */puts(Ok);return 0; }当你运行这个程序时如果 FILE.TXT 这个文件不存在那么 pfile 将返回 NULL。在这种情况下我们还对 pfile 进行写操作的话会立刻导致 core dump Open the FILE.TXT file ... Now display the contents of FILE.TXT ... Segmentation fault (core dumped)所以我们要始终检查文件指针是否有效。例如在调用 fopen 函数打开文件后使用 if (pfile ! NULL) 以确保指针是可以使用的。小结再有经验的程序员都有可能犯错误所以写代码的时候我们要严谨再严谨。但是如果你养成一些良好的习惯并添加一些额外的代码来检查这五种类型的错误则可以避免严重的 C 编程错误。上面介绍的 5 种常见错误你都写过哪些 Bug 呢留言跟大家交流哦看看谁是 Bug 王推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号后台回复「1024」获取学习资料网盘链接。欢迎点赞关注转发在看您的每一次鼓励我都将铭记于心~

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

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

相关文章

完整教程:蒸汽机革命后工业生产方式的变革与AI智能名片S2B2C商城小程序的影响

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 PHP7/8 实战入门:15 天精通现代 Web 制作——第 15 课:项目实战与部署

2025 PHP7/8 实战入门:15 天精通现代 Web 制作——第 15 课:项目实战与部署pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fam…

做网站怎么投放广告企业网站加快企业信息化建设

xcopy XCOPY是COPY的扩展,可以把指定的目录连文件和目录结构一并拷贝,但不能拷贝系统文件;使用时源盘符、源目标路径名、源文件名至少指定一个;选用/S时对源目录下及其子目录下的所有文件进行COPY。除非指定/E参数,否则…

AWS SageMaker SDK 完整教程:从零开始云端训练你的模型

作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 PS:网页端用不明白...还是SDK方便...一、SageMaker介绍Amazon SageMaker 是 AWS 提供的全托管机器学习平台,它覆盖了从数据准备、模型训练、超参数调优到…

反转数字-处理溢出的条件-Java

反转数字-处理溢出的条件-Java题目:反转数字 描述 给定一个32位的有符号整数num,将num中的数字部分反转,最后返回反转的结果。 1.只反转数字部分,符号位部分不反转。 2.反转后整数num超过 32 位的有符号整数的范围…

废品回收小程序:从 “扔垃圾“ 到 “变资源“ 的体验革命 - 详解

废品回收小程序:从 “扔垃圾“ 到 “变资源“ 的体验革命 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

做网站的会什么wordpress调用主站的文章

1、点击主页面右上角的三条横杠 腾讯视频如何设置关闭本地视频后自动打开主界面 2、点击【设置】 腾讯视频如何设置关闭本地视频后自动打开主界面 3、点击左侧的【高级设置】 腾讯视频如何设置关闭本地视频后自动打开主界面 4、勾选【关闭本地视频后自动打开主界面】 腾…

怎么做自己公司的网站如何用手机免费创建网站

12 月 3 日,2023 IoTDB 用户大会在北京成功举行,收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题,多位学术泰斗、企业代表、开发者,深度分享了工业物联网时序数据库 IoTDB 的技术创新…

网站开发可行性报告货运app开发公司

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 简介: 对比大多数开发者来说,杨飞的职业路线可以说是大相径庭。从大厂到创业公司,从一线城…

用flash做的网站网站开发相关技术

热门API接口大全分享,含天气、物流等。。。 天气预报查询:查询全国以及全球多个城市的天气,包含15天天气预报查询。天气预警:可以获取指定城市当前生效中的各类天气预警,如寒潮蓝色预警信号,或一次性拉取全…

详细介绍:C++基础(22)——模板的进阶

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

一个问题记录-服务器那边所以得请求进去,去操作数据库的时候,全部都拿不到数据库链接com.alibaba.druid.pool.GetConnectionTimeoutException

一个问题记录-服务器那边所以得请求进去,去操作数据库的时候,全部都拿不到数据库链接com.alibaba.druid.pool.GetConnectionTimeoutException1 问题愉快的星期六,需要接到电话,说系统崩了一看日志,发现所以请求全…

稍微人格解离一点也无所谓,别太过就行

正文今天聊个有点危险的话题:“人格解离”。先声明,我说的不是临床上那种需要看医生的病理性人格解离障碍(DID)。我说的是一种主动的、可控的、作为心理防御机制的 “轻度人格解离”。轻度的人格解离,是一种非常实…

快速构建高性能 web 应用!了解 Gin Web 框架 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

淘宝客做连接网站网站前端静态模板下载

关于APP开发目前已经过了火热的阶段,现在学习APP开发的人越来越多,但在实际的业务场景中,APP开发还是有一部分的市场需求。 所以,这里简单记录一下APP开发的几种思路和方案。 APP平台 首先,目前APP开发主要有两大平…

移动网站功能峰峰信息港免费发布平台

播放器有个功能,当用户打开视频时,需要读取媒体文件的总时长等信息,不巧的时,获取FLV时总失败,下面来具体分析下FLV和MP4获取总时长的原因和区别: 播放器有个获取MediaInfo的接口,功能如下&am…

题解:[GESP202509 五级] T1

题目传送门 目前还不知道,题目还未加入洛谷题库 题目概述 T1: 给定一个数 \(n(n \le 10^5)\),你需要选出若干个在1到 \(n\) 范围内的数,使其中任意两个数互质(即两数最大公因数为1),问最多你能选几个数? 解题思…

US$39.9 Scorpio-LK Emulators SLK-06 for Tango Key Programmer

Scorpio-LK Emulators SLK-06 for Tango Key Programmer including AuthorizationSLK-06 is battery powered. Note that a battery is not included with an emulator and has to be obtained locally. Three standar…

公司做网站一般网站建设哪儿好

preareRefresh:刷新前的工作准备 obtainFreshBeanFactory:获取子类刷新后的内部beanFactory实列 prepareBeanFactory:为容器注册必要的系统级别bean postProcessBeanFactory:允许容器的子类注册postProcessor invokeBeanFacto…

OI 模板合集

输入输出优化 int 快读 int read() {int xr=0,F=1; char cr;while(cr=getchar(),cr<0||cr>9) if(cr==-) F=-1;while(cr>=0&&cr<=9)xr=(xr<<3)+(xr<<1)+(cr^48),cr=getchar();return x…