
c语言
9号信箱
这个作者很懒,什么都没留下…
展开
-
【C语言学习疑难杂症】第20期:0x00007FF7F2821964处引发的异常0xC0000005写入位置 0x0000000000000
检查代码中是否存在野指针访问的情况,确保在进行写入操作之前,内存已经被正确分配或初始化,并且在使用完毕后进行了正确的释放。空指针访问:代码尝试在空指针地址(0x0000000000000000)处进行写入操作,导致访问冲突。检查代码中是否存在数组越界的情况,确保在进行写入操作之前,数组的索引值在合法范围内。检查代码中是否存在空指针访问的情况,确保在进行写入操作之前,指针已经被正确初始化。野指针访问:代码尝试在已释放或未初始化的内存地址进行写入操作,导致访问冲突。原创 2024-04-10 11:38:33 · 451 阅读 · 0 评论 -
【C语言学习疑难杂症】第19期:fabs和abs的用法,以及注意事项
比如要计算一个浮点数的绝对值,误用了abs函数,由于浮点数作为参数传递给abs,而abs的参数是一个int类型,就会造成浮点数小数点后的值的丢失,并且返回值也是一个整数,自然得到的结果也就错了。fabs和abs是两个不同的函数,用于计算数值的绝对值。分享C语言阶段一些容易被大部分同学忽略的重点、难点知识,帮助C语言知识学习的拔高。分享C语言阶段一些容易被大部分同学忽略的重点、难点知识,帮助C语言知识学习的拔高。通过上面的描述,我们也可以比较容易的知道,如果两个函数用错了,就会容易出错。原创 2024-04-10 11:31:43 · 1335 阅读 · 0 评论 -
【C语言学习疑难杂症】第17期:如果一个函数定义的有返回值,但是实际函数没有给返回值,会有什么现象呢?
我们也可以看到,如果不给返回值,就可能造成一些意外的情况发生。所以为了养成一个比较好的编码习惯,我们也应当在这些对应的函数里加上返回值。在很多环境下,我们定义的函数有返回值类型,而我们实际的函数如果不给返回值的话,一般是会有警告的,首先。分享C语言阶段一些容易被大部分同学忽略的重点、难点知识,帮助C语言知识学习的拔高。对于上述函数定义的有返回值,但是实际函数没有给返回值的情况,一般是。这个代码在vs2022下测试结果为1。,比如说给了一个默认的返回值。这个代码测试的结果为0。原创 2024-04-10 11:09:25 · 457 阅读 · 0 评论 -
【C语言学习疑难杂症】第18期:一个90%的人都会做错的C语言题目,附详细解析
分享C语言阶段一些容易被大部分同学忽略的重点、难点知识,帮助C语言知识学习的拔高。分享C语言阶段一些容易被大部分同学忽略的重点、难点知识,帮助C语言知识学习的拔高。按照%x输出时,还会发生整型提升为0000 0000...0101 1001。然后0xf是二进制的0000 0000...0000 1111(32位)16进制的95是二进制的1001 0101。然后a & oxf0,会发生整型提升。然后a & oxf,会发生整型提升。赋值给b,发生截断,得到。赋值给c,发生截断,得到。原创 2024-04-10 11:13:25 · 228 阅读 · 0 评论 -
【C语言学习疑难杂症】第16期:对于浮点数,如何根据用户输入设置浮点数的输出宽度和小数点后显示位数
疑难杂症】专栏说明:分享C语言阶段一些容易被大部分同学忽略的重点、难点知识,帮助C语言知识学习的拔高。首先,我们先简单回顾下,如何输出一个浮点数,宽度为5,小数点后显示2位?因为默认是右对齐,所以输出是3的前面会有一个空格。原创 2024-03-05 18:43:53 · 201 阅读 · 0 评论 -
【C语言学习疑难杂症】第15期:如何用C语言fseek等函数,计算一个文件的大小
假设有一个文件,名为 helloworld.txt,现在需要统计这个文件的大小,我们应该怎么做?分享C语言阶段一些容易被大部分同学忽略的重点、难点知识,帮助C语言知识学习的拔高。该函数返回当前文件指针相对于文件起始位置的偏移量,即当前位置距离文件开头的字节数。分享C语言阶段一些容易被大部分同学忽略的重点、难点知识,帮助C语言知识学习的拔高。是 C 语言中用于文件操作的两个函数,它们通常与。字节为偏移量的位置,相对于。该函数将文件指针定位到以。原创 2024-02-21 16:44:28 · 155 阅读 · 0 评论 -
【C语言学习疑难杂症】第14期:C语言文件读写相关函数的使用
在上述示例中,我们首先使用fopen函数打开一个名为example.txt的文件,并将返回的文件指针存储在file变量中。在后续的调用中,将第一个参数设置为NULL,以便继续分割剩余的字符串。需要注意的是,sscanf和sprintf函数都是基于格式化字符串的输入输出函数,因此在使用它们时,要特别注意格式字符串的正确性和与要处理的数据的匹配性,以避免潜在的错误和安全问题。需要注意的是,在使用fread函数读取字符串时,需要确保读取的字节数不超过缓冲区的大小,并且在读取的数据末尾手动添加字符串结束标志\0。原创 2024-02-21 16:28:21 · 93 阅读 · 0 评论 -
C语言实现字母大小写转换
根据ascii表的字符规律,大写字母+32可以得到对应小写字母,小写字母-32可以得到对应大写字母。这种方法利用ASCII码中大小写字母的特殊规律,通过位运算来进行大小写转换。C语言提供了标准库函数。原创 2024-02-21 16:06:40 · 2024 阅读 · 3 评论 -
【C语言学习疑难杂症】第12期:如何从汇编角度深入理解y = (*--p)++这行代码(易懂版)
这个代码看似简单,但是在“y = (*--p)++;”这行代码里,编译器做了很多工作。前6行就不讨论了,简单的说就是它把指针往前移动一个位置,然后解引用把里面的值赋值给y。但是后面的部分,也就是从第7行开始,我们需要重点理解。对于如下代码,思考一下输出结果是什么?原创 2023-12-26 22:35:39 · 1416 阅读 · 2 评论 -
【C语言学习疑难杂症】第11期:字符串字面值常量赋值给指针变量或者数组,90%的人都会出错的一道题目
虽然C++兼容了C语言,但是在语法层面上, 还是有很多需要注意的点,所以在使用对应的语言的时候,也要特别小心。提问:对于上述4行代码,在c语言和c++环境中,分别都有哪些是正确的?对于这个题目,一定要先思考下,看看自己是不是真的理解了!原创 2023-12-26 22:15:27 · 596 阅读 · 0 评论 -
【C语言学习疑难杂症】第10期:%g 和 %f的使用和区别
格式控制符会根据浮点数的精度自动选择使用 %f 或 %e(指数表示法)来输出。它会自动省略小数点后面的多余零,并且对于较大或较小的数会使用指数表示法。例如,对于浮点数 3.140000,使用 %g 输出时会显示为 3.14。格式控制符会保留小数点后面的所有零,不会进行舍入或省略。例如,对于浮点数 3.140000,使用 %f 输出时会显示为 3.140000。%g 和 %f 都是C语言中的格式控制符,用于格式化输出浮点数。它们的区别在于对于小数点后面的零的处理方式。原创 2023-12-03 17:03:56 · 2502 阅读 · 0 评论 -
【C语言学习疑难杂症】第9期:关于%*s以及%*d等的使用
对于第三种情况,必须要输入空格后的第二部分内容。因为%*s它没有限定忽略的长度,所以它会遇到你输入一个空格后才结束,然后把0读进去,给到b变量。上面前面两种例子里,诸如%2d,它是从输入中读取2位的宽度作为一个整数,%*3s,则是用于过滤3个宽度的输入字符。关于%*s的使用的一些问题。原创 2023-12-03 16:56:04 · 550 阅读 · 0 评论 -
【C语言学习疑难杂症】第8期:VS2022中输出时中文乱码的问题
运行-输入intl.cpl-管理-系统区域设置,取消勾选beta版,和改简体中文中国并重启。如果已经是,可以改英语并重启,再改回简体中文再重启。在VS2022中输出中文乱码的问题通常是由于编码设置不正确导致的。原创 2023-12-03 12:28:16 · 7352 阅读 · 0 评论 -
【C语言学习疑难杂症】第7期:函数参数的处理过程
=比较b和c,上次计算b已经为3了,c也为3,所以相等,表达式值为真,结果为1,1赋值给a,a为1,表达式结果为1。b==c因为b和c的结果不同,所以这个表达式结果为假,即0。再判断a==0,a为1,所以两值不等,整个表达式结果为0。在最后一次处理结束后,此时a变量里面的值,已经变成了3,因为最后两步都是打印a的值,所以最终结果是3 3 0 0。首先把c赋值给b,所以b此时结果为3。小括号表达式结果也为3,a==3为假,结果为0。连续赋值,a的结果最后为3。原创 2023-11-30 14:54:05 · 448 阅读 · 0 评论 -
【C语言学习疑难杂症】第6期:C语言中如何打印一些特殊字符,比如打印扩展ascii码字符
它不会影响显示的扩展字符的控制台字体名为"光栅字体。若要更改的 256 个 8 位字符值映射到标志符号的一种固定间距 Unicode 字体设置,而不是加载一个单独的、 非-Unicode 字体的每个调用 SetConsoleOutputCP() 设计 SetConsoleOutputCP()。ascii表中的字符只有128个,是从0-127,而拓展ascii表的内容是128-255。拓展表中它们都是一些特殊的字符,如果我们想答应ascii拓展码中的一些字符应该要怎么操作呢?函数介绍:(来源:百度百科)原创 2023-11-30 14:30:02 · 1962 阅读 · 0 评论 -
【C语言学习疑难杂症】double类型数据输入输出时应该使用什么格式
在输入的时候,很多朋友总是错误的使用%f来读取一切浮点数类型,包括单精度的float和双精度的double类型。首先,使用"%f"格式符来输出double类型的变量是没有问题的,因为C语言的标准规定了"%f"用于输出浮点数(包括double类型)。虽然在某些编译器中,使用"%lf"格式符也可以正确输出double类型的值,但这是因为这些编译器对"%lf"和"%f"都进行了兼容处理。因此,为了保持代码的规范性和可移植性,建议在输出double类型的值时使用"%f"格式符。输出double类型时,使用%f。原创 2023-11-30 11:18:37 · 11883 阅读 · 2 评论 -
【C语言学习疑难杂症】C语言中数组存储时为什么从低地址到高地址
其中,base_address是数组的基地址(即数组在内存中的起始地址),i是元素的下标,element_size是每个元素的大小(以字节为单位)。数组在内存中是连续存储的,因此数组的第一个元素(下标为0)存储在最低地址,而最后一个元素(下标为数组长度-1)存储在最高地址。由于数组元素在内存中是紧密相邻的,访问数组时,可以通过简单的加法计算得到所需的元素地址。总之,C语言中数组从低地址到高地址的存储顺序是为了与计算机系统的内存组织方式相吻合,使得数组访问更加高效,并且与指针的偏移量计算方式保持一致。原创 2023-11-30 11:23:24 · 1758 阅读 · 0 评论 -
【C语言学习疑难杂症】error C4996: ‘scanf‘: This function or variable may be unsafe
最近有很多同学表示,在使用scanf这个函数的时候出现了下面这样的错误,对于初学的同学来讲,不知道如何解决。不知道大家有没有同样的情况。原创 2023-07-25 08:00:00 · 2240 阅读 · 1 评论 -
【第二章】谭浩强C语言课后习题答案
1. 什么是算法?试从日常生活中找3个例子,描述它们的算法算法:简而言之就是求解问题的步骤,对特定问题求解步骤的一种描述。比如生活中的例子:考大学首先填报志愿表、交报名费、拿到准考证、按时参加考试、收到录取通知书、按照日期到指定学校报到。去北京听演唱会首先在网上购票、然后按时坐车到北京,坐车到演唱会会场。把大象放进冰箱先打开冰箱门,然后将大象放进冰箱,关冰箱。2. 什么叫结构化的算法?为什么要提倡结构化的算法?原创 2023-03-05 20:58:14 · 774 阅读 · 1 评论 -
【第一章】谭浩强C语言课后习题答案
程序:就是一组能识别和执行的指令,每一条指令使计算机执行特定的操作程序设计:是指从确定任务到得到结果、写出文档的全过程(1)建立一个新项目,定名为project1.(2)建立一个新文件,定名为test1。(3)向test1 文件输人源程序(此源程序为读者自己编写的程序)。(4)编译该源程序,如发现程序有错,请修改之,直到不出现“编译出错”为止。(5)连接并运行, 得到结果。分析结果。原创 2023-03-04 21:03:21 · 676 阅读 · 0 评论 -
一个字等于多少字节?
一个字等于多少个字节,与系统硬件(总线、cpu命令字位数等)有关。总线一般被设计来传输固定大小的一块数据,这块数据被称为字(word),一个字包含的字节数(即字的大小)是各种计算机系统里面的基本参数,而且这个参数在不同的系统里通常是不同的。大多数的现代计算机系统里面,一个字要么是4个字节,要么是8个字节.①:1字节(byte) = 8位(bit)②:在16位的系统中(比如8086微机) 1字 (word)= 2字节(byte)= 16(bit) 在32位的系统中(比如win32) ...原创 2021-08-27 17:05:58 · 41827 阅读 · 0 评论 -
【C语言学习疑难杂症】Stack arround the variable was corrupted问题
提出问题:在开启正文之前,我们先看这样一个例子。我们重点看这个弹出的Debug Errir框,中间划红线的部分,它报了这样一个错误。首先,我们特别强调一个问题就是,这个问题可能会在很多同学以后的学习中经常遇到,所以请务必重视这个问题。解决办法:对于这个问题,我们还是先回到这个案例中来,我们先来看看这位同学的代码出现了什么问题。首先,大家重点关注,代码中划红线的部分:定义了一个整型数组,含有5个元素。接下来,这位同学干了一件事,首先给j赋值5,这样就有一个b[5],这时候我们再回过原创 2021-08-21 17:50:27 · 2764 阅读 · 0 评论 -
记录一行有趣的代码:#define A(x) #@x
Thecharizingoperatorcanbeusedonlywithargumentsofmacros.If#@precedesaformalparameterinthedefinitionofthemacro,theactualargumentisenclosedinsinglequotationmarksandtreatedasacharacterwhenthemacroisexpanded.Forexampl...原创 2021-01-20 16:04:58 · 574 阅读 · 1 评论 -
记录一个scanf很容易出错的问题:scanf(“%.1f“)错误,区分精度和域宽
很多朋友写代码的时候,常常会遇到这样的一个问题:scanf("%.1f");我们都知道,在printf时,可以设置输出的精度,但是scanf是不能设置精度的,也就是不能出现任何 .xf 这样的格式但是却可以写成scanf("%2f");这是设置域宽,是正确的格式。很多朋友在这里都把域宽和精度两个概念混淆了,导致输出结果有问题,却又很难发现错误,因为对于精度这是的问题,一般编译器不报错的...原创 2021-01-12 11:21:20 · 7344 阅读 · 2 评论 -
malloc()和free()的原理及实现
在C语言中只能通过malloc()和其派生的函数进行动态的申请内存,而实现的根本是通过系统调用实现的(在linux下是通过sbrk()系统调用实现)。malloc()到底从哪里得到了内存空间?答案是从堆里面获得空间。也就是说函数返回的指针是指向堆里面的一块内存。操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的申请时,就会遍历该链表,然后就寻找第一个空间大于所申请空间的堆结点,然后就将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。malloc()在运行期动态分配分配内存,free转载 2020-11-25 15:55:14 · 638 阅读 · 0 评论 -
关于位段,你应当了解这些
位段与结构体的不同位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的。 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。 位段的成员名后边有一个冒号和一个数字。位段的跨平台问题int 位段被当成有符号数还是无符号数是不确定的。 位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,写成...原创 2020-11-24 19:56:17 · 205 阅读 · 0 评论 -
为什么要进行内存对齐?本文也许可以帮到你
为什么存在内存对齐?大部分的参考资料都是如是说的:1. 平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址 处取某些特定类型的数据,否则抛出硬件异常。2. 性能原因: 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。 原因在于,为了访问未对齐的内存,处理 器需要作两次内存访问;而对齐的内存访问仅需要一次访问。总体来说: 结构体的内存对齐是拿空间来换取时间的做法。但是关于上面的说法,其实是很难理解的,但是相信上面也是大家搜到的最多的答原创 2020-11-24 19:40:06 · 662 阅读 · 1 评论 -
我们为什么要定义不同的数据类型?数据类型的意义是什么?
要解决标题中的问题,我想可以从下面两个方面来回答: 数据类型解决了“存”的问题:它决定了使用这个类型需要开辟空间的大小以及内存中的数据是如何存储的; 数据类型解决了“取(读)”的问题:它改变了看待内存空间的视角,比如在内存中同样的两块4个字节的空间,存放着同样的二进制码,如果这两块内存对应的两个变量类型不一样,那么它们的意义也就不一样了。 ...原创 2020-10-21 18:22:43 · 8013 阅读 · 0 评论 -
C/C++中的标准泛空格符有哪些?
standard white-space characters are:' ' (0x20) space (SPC) '\t' (0x09) horizontal tab (TAB) '\n' (0x0a) newline (LF) '\v' (0x0b) vertical tab (VT) '\f' (0x0c) feed (FF) '\r' (0x0d) carriage return (CR) ...原创 2020-08-17 21:26:07 · 1182 阅读 · 0 评论 -
傻傻分不清楚?空格、空字符、‘\0’和0区别
空格:空格键产生的字符,ascii码十进制:32空字符:字符串结束标志‘\0’,为被动添加,ascii码十进制:0字符0:ascii码十进制:48原创 2020-08-17 10:42:09 · 12169 阅读 · 0 评论 -
【看完必会系列】*p++、*(p++)、(*p)++、*++p、++*p的区别
整片文章分为三个部分,分别是:对于理解所提问题必须清楚的3个关键点; 对3个关键点的理解; 对于所提问题的案例解释。1、对于理解所提问题必须清楚的3个关键点:解决题目所提的问题之前,必须要明确以下几点,它们是用来区分上述几个例子的关键:前置++(即++p),后置++(即p++),*,()等4个运算符优先级 优先级相同情况下的结合性 前置++和后置++的运算结果其中,第三点又是这三个关键点中最关键的,特别在帮助大家理解含有前置++和后置++的复杂表达式的时候。2、对3个原创 2020-08-10 08:51:27 · 8171 阅读 · 8 评论 -
32位处理器和32位地址线区别以及为什么32位地址线内存大小为4G的解释
在网上看到很多朋友分不清32位处理器和32位地址线的问题,还有就是提出32位地址线为什么是4G大小的内存?首先这是一个很好的问题,但是网上却有很多不好的答案。因为回答的人本身也没有搞清楚,把32位处理器和32位地址线当做一回事给别人解释,误导他人。32位处理器:32位处理器表示我们的处理器一次可以处理的数据量,也就是32位大小,即4个字节。那么我们现在常见的还有64位处理器,它代表处理器一次可以处理8个字节的大小。处理器的位数代表了处理器处理数据的能力。32位地址线:32位地址线原创 2020-07-24 15:08:30 · 5629 阅读 · 3 评论 -
C语言要点系统复习三:scanf读取缓冲区的那些事
scanf函数读取缓冲区数据的问题标准I\O的缓冲类型 标准I\O根据不同的应用需求,提供了全缓冲、行缓冲、无缓冲三种缓冲方式。 全缓冲:只有当划定的缓冲区被填满或者数据读取至末尾时,才开始执行 I\O 操作(执行系统提供的 read\write 操作)。磁盘文件的读写一般采用这种方式。 行缓冲:当输入输出过程遇到换行符''\n"或者当分配缓冲区已满时,才开始执行 I\O 操作。一般涉及终端的读写操作如 stdin 与 stdout 使用这种缓冲方式。 无缓冲:当有数据产生时,.转载 2020-07-23 14:20:31 · 1564 阅读 · 0 评论 -
c语言中的static关键字的作用
在我们日常使用过程中,static通常有两个作用:1、修饰变量静态全局变量:全局变量前加static修饰,该变量就成为了静态全局变量。我们知道,全部变量在整个工程都可以被访问(一个文件中定义,其它文件使用的时候添加extern关键字声明 ),而在添加了static关键字之后,这个变量就只能在本文件内被访问了。因此,在这里,static的作用就是限定作用域。静态局部变量:局不变量添加了s...原创 2018-08-19 17:42:15 · 23869 阅读 · 1 评论 -
谈谈你对指针的理解
文章转载自:https://blog.youkuaiyun.com/qq_40945965/article/details/79535153//指针概念 //为什么用指针 //野指针、空指针、this指针、悬垂指针(迷途指针)、智能指针、成员指针 //指针运算(步长问题) //指针常量与常量指针 //指针与数组的区别 //指针与引用的区别 //指针数组和数组指针 //指针函数和函数指针 ...转载 2018-08-15 18:23:43 · 493 阅读 · 0 评论 -
scanf()中的栈溢出问题
char x,y;scanf("%4c%3c",&x,&y);输入:abcdefg输出:fe仔细观察上面的输入输出,不知道大家有没有什么疑问?解释: x, y在程序的栈区保存, 且x地址高于y地址.%4c读取4个字符, 存入&x为首地址的栈空间, 也就是在x内存入字符a, 在&x+1, &x+2 &x+3存入字符b, c...原创 2018-07-30 10:48:19 · 3660 阅读 · 1 评论 -
柔性数组的使用
柔性数组柔性数组的特点柔性数组的使用柔性数组的优势柔性数组在c99中,对于结构体中的最后一个成员,可以允许最后一个成员是未知大小的数组,这样的数组就叫做柔性数组。typedef struct st_type{ int i; int a[0];}type_a;某些编译器对于这种写法会报错,我们可以改写为下面的形式:typede...原创 2018-05-12 18:25:49 · 3272 阅读 · 0 评论