自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 文本文件和二进制文件、文件读取结束的判定、文件缓冲区

/////——6. 文本文件和二进制文件(写到文件中那些看的懂的文件就是文本文件,看不懂的就是二进制文件)////如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。////如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占用5个字节(每个字符一个字节),而。// //注:fclose在关闭文件的时候,也会刷新缓冲区。////字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储。////中每一个正在使用的文件开辟一块“文件缓冲区”。

2024-01-30 09:53:58 896

原创 文件的随机读写 fseek,ftell,rewind

/ //假设我们的偏移量选的是SEEK_SET,即从起始位置算偏移量,则偏移量应该是2.若选择的是SEEK_END,则从每行末尾的的位置。// // (abcdef的后面,所以f的偏移量为-1)开始算偏移量,则应该是-4的位置,偏移量会根据不同的初始位置进行变化。//////————5. 文件的随机读写 fseek,ftell,rewind。////SEEK_SET:文件的起始位置,文件当前指向的位置。//////根据文件指针的位置和偏移量来定位文件指针。

2024-01-29 16:13:16 482

原创 sscanf、sprintf

///把一个格式化的数据写到字符串里面去,本质是把一个格式化的数据转换成字符串。// //把结构体的内容按照%s %d %f的格式写到字符串ptr中。// //从字符串ptr中获取一个格式化的数据放到结构体t中。////从字符串中获取一个格式化的数据放到结构体中。//printf:是针对标准输出的格式化输出语句。//scanf:是针对标准输入的格式化输入语句。

2024-01-23 10:12:21 421

原创 C语言文件操作

///我们前面学习结构体时,运行时数据是(暂时)存放在内存中的,当程序退出的时候空间需要回收,通讯录中的数据就不存在了,等下次运行通讯。////这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。////在以前各章所处理数据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显。////字,文件状态及文件当前的位置等)。该结构体类型是有系统。////但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)

2024-01-16 08:27:00 445

原创 柔性数组(柔性数组在结构体中只能存在一个)

///3.包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大。////C99 中,结构体中的最后一个元素(成员变量)允许是未知大小的数组,这就叫做“柔性数组”成员。////如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给。////了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。////2.sizeof 返回的这种结构体内存大小不包括柔性数组的内存。

2024-01-13 21:38:05 713

原创 C/C++程序的内存开辟

/如上式代码中的:(int*)malloc(sizeof(int)* 4);//把b调整为sizeof(int) * 4的一块空间的大小,灵活调整。//实际上普通的局部变量是在栈区分配空间的,栈区的特点是在上面创建的变量出了作用域就销毁。// 类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。

2024-01-12 20:18:59 436

原创 经典的4道笔试题

/void GetMemory(char* p)//1.改为char**p,也可以不传参,将对应代码块的p改为char**p//2.void改为char*//返回栈区空间上的地址,均为临时的,进行返回时的操作是很危险的//返回栈空间地址的问题。// //而不是p所指向的内容,即打印时并没有可打印的元素,因为结束结束GetMemory()函数时,//野指针不可以进行任何操作。//////——改法2(传参采取返回p地址,并定义变量接收地址)//////————2请问运行Test 函数会有什么样的结果?

2024-01-11 09:44:38 507

原创 动态内存管理——calloc、realloc

///2.当是情况2 的时候,原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找一个合适大小的连续空间来使用,////1.当是情况1 的时候,要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发生变化。////有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的时。//// 原有的空间中,realloc把原有的数据拷贝到新的空间中之后,会把原有的空间释放掉。////(另找的空间大小为原有的大小+追加空间的大小)这样函数返回的是一个新的内存地址。

2024-01-09 08:39:29 524

原创 动态内存管理——常见错误

/ if (flag == 5)//当flag=5时,申请的空间用完后不会被释放,倒是内存泄漏。// if (flag == 5)//当flag=5时,申请的空间用完后不会被释放,倒是内存泄漏。// //但p中依然存着原来的地址,导致p为野指针,也无法进行任何操作。////注意:忘记释放不再使用的动态开辟的空间会造成内存泄漏。//// 动态开辟的空间一定要释放,并且正确释放。////——4 使用free释放一块动态开辟内存的一部分。

2024-01-08 08:38:24 640

原创 通讯录(动态增长版本)

contact.h////此通讯录为静态的版本(设置多少量就是多少,量的大小无法调整)////动态版本:需要多少就给多少,不够用了就开辟新空间,多了就自动减少////文件版本:动、静两种只要退出通讯录,保存的信息就消失了,而文件版本会依旧保存#define _CRT_SECURE_NO_WARNINGS 1#define MAX 100#define MAXname 20#define MAXsex 10#define MAXtre 12#define MAXaddr 30#de

2024-01-07 10:11:08 768

原创 2023新版edge浏览器页面加载不出来的解决办法

更改浏览器设置:打开edge浏览器,点击右上角的“...”图标,选择“设置”,点击“系统”,将“javascript”设置为“允许”,将“启用实验性JavaScript功能”设置为“开”。- 清除浏览器缓存:打开edge浏览器,点击右上角的“...”图标,选择“设置”,点击“隐私和安全”,选择“清除浏览数据”,勾选“缓存的图像和文件”,点击“清除”。- 更新浏览器:打开edge浏览器,点击右上角的“...”图标,选择“设置”,点击“关于edge”,检查是否有新的版本可用,如果有,请更新。

2024-01-06 16:11:38 888

原创 动态内存管理:malloc free

///返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己进行强制类型转换来决定。////如果参数 size(申请字节的大小) 为0,malloc的行为是标准是未定义的,取决于编译器。// //没有free,并不意味着着,内存空间就不会回收了,当程序退出的时候,系统会自动回收内存空间。////1.如果参数 ptr 指向的空间不是动态开辟的,那free函数的行为是未定义的。////2. 数组在声明的时候,必须指定数组的长度,它所需要的内存在编译时分配。

2024-01-06 14:10:58 790

原创 联合union

/union //Un//此类型创建在了函数内部(此类型只是为函数准备的,用一次之后就不再使用),因此联合标签Un可以省略,从而为:匿名联合(共用体)类型。// //Un2中,最大对齐数为4,最大成员大小为14,所以对齐到最大对齐数的整数倍,为16。// //Un1中,最大对齐数为4,最大成员大小为5,所以对齐到最大对齐数的整数倍,为8。//// //01 00 00 00——小端排序。//// //00 00 00 01——大端排序。//////————联合:union。

2024-01-05 20:49:26 693

原创 枚举的赋值、定义、优点、使用

///而枚举类型并不是替换值,如果在代码中我们用到了枚举类型,在调试的时候依然可以观察到这些相关的值的,所以枚举相对于#define更便于调试。//////test.c文件————(预处理)———》编译————》链接————》生成.exe的文件。//// 也可以赋初值,比如下面的枚举类型,red被赋值1,后面的就会依次递增1。////这些可能取值都是有值的,默认从0开始,一次递增1,在定义 枚举常量的时候。////这样的代码翻译成二进制指令的时候调试,即不能很好的观测到与M相关的值的。

2024-01-04 15:17:19 863

原创 通讯录(静态)

/ sizeof(p)可替换为 sizeof(pc->data[0]),p只是元素pc->data的类型,拿下标为0的元素来计算也可以。//但是通过pc->count--,假设100个元素,删除最后一个元素的话,只需要count--,我们最后一个元素不覆盖也可以,count--为99,最后一个元素我们也访问不到,因为我们是拿count来访问我们的数据的。printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");

2024-01-03 12:23:17 1099

原创 ​​​​​​​编程语言的走向

说实话,作为一个初学者,我并不认为自己的话语权对于其他程序员来说能有什么用处。但是我觉得对于一个事物未来的发展或走向,每个人都是有一定见解的。如今AI的加入,便利了很多人,但是也给很多人产生了不便利。一层层的食物链,一层层的捕食关系。所以,我作为一个初学者,并不像因为自己的一句对未来事务的发展方向的期待,而导致给任何人带来的不便。C语言就是我刚刚学完的,学了很多东西,甚至每天梦里都在联想代码的优化,含义的理解。在未来,可能我们输入一句代码,就传送到了其他城市,但路途的风景也终究是便捷的代价。

2024-01-02 16:40:57 660

原创 位段的定义、内存分配、应用

///注意:位段这个语法的设计本身是不可跨平台的,但是我们能写出带有跨平台性的代码(针对不同的平台写出不同的代码)////2. 位段的空间上是按照需要以每次4个字节( int )或者每次1个字节( char )的方式来开辟的。////4. 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的比特位时,是。////3. 位段涉及很多不确定因素,位段是不跨平台的,注重可移植性的程序应该避免使用位段。////总结:跟结构体相比,位段可以达到同样的效果(如果设计成位段式的这种结构,

2024-01-02 09:20:07 587

原创 结构体:修改默认对齐数、结构体传参

/#pragma pack(1)//设置默认对齐数为1(为1时表示不进行对齐存放,全部紧挨着,最省空间,就不需要再考虑顺序问题了)//#pragma pack()//取消设置的默认对齐数,还原为默认//设置的结束。//#pragma pack(8)//设置默认对齐数为8//设置的开始。////#pragma:预处理指令,可以改变我们的默认对齐数。//////注意:如果需要在多个结构体中设置不同的默认对齐数。//////——————7.修改默认对齐数。///// /————8. 结构体传参。

2024-01-01 14:14:08 493

原创 结构体变量的定义和初始化、结构体内存对齐

///4. 如果处于嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处(不可占用已被使用的对齐数(偏移量)),////3. 结构体总大小为最大对齐数(每个成员变量的对齐数进行比较得出的最大的数)的整数倍。////不是所有的硬件平台都能访问任意地址上的任意数据的;//// 结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。////偏移量计算方法:// 借助宏(macor),头文件为://// 编译器无对齐数默认值时,对齐数就用该成员的对齐数。

2023-12-31 09:55:04 494 1

原创 自定义类型:结构体,枚举,联合——结构体

///(只能使用1次,1.创建变量列表(用于局部变量)或2.创建于mian函数中(用于局部变量),////可以1.2同时存在,但是作为局部变量的那个不可以进行任何操作),其余均不可再次使用。////匿名结构体类型(就是struct Stu中没有了结构体标签(tag))////5. 结构的自引用(自己找到一个与自己同类型的另外一个节点或数据)// //虽然成员变量相同,但是编译器看来,依然是两种不同的类型)//struct //struct Stu:叫做类型,s1,s2为变量。

2023-12-30 12:49:52 683

原创 整数除法相关用法:floor、ceil、round

///floor函数把转换后的结果强转为int类型的(注意:floor把计算结果强转为int后,会丢失精度)//// 功能:把一个小数向下取整,即就是如果数是2.2 ,那向下取整的结果就为2.000000。//// 功能:把一个小数向上取整,即就是如果数是2.2 ,那向上取整的结果就为3.000000。//// 成功:返回一个double类型的数,此数默认有6位小数。//// 成功:返回一个double类型的数,此数默认有6位小数。////////整数除法——舍小数,取整数。

2023-12-29 14:23:35 793

原创 memcpy函数的实现与模拟my_memcpy

/ // 拷贝时已将把12345的数据拷贝到34567的位置上,此时的34已经变成了12,而5是对应3的拷贝,可是3已经变成了1。// //一个int为4字节,当n-1个int的字节数<num(字节数)<n个int的字节数,按n个整型计算.////由于strcpy与strncpy只能拷贝字符/字符串,所以引入memcpy(可以拷贝所有类型的数据)//打印数组要带下标!//打印数组要带下标!// //报错原因:强制类型转换的临时变量,而对临时的变量进行自增/减是没意义的。

2023-12-28 15:54:21 469

原创 memmove函数的实现与模拟my_memmove

void* my_memmove(void* dest, const void* src, size_t num)//void*的指针不能直接进行解引用。//重叠:自己给自己拷贝。////和memcpy的差别就是memmove函数处理的源数据(源内存块)和目标数据(目标内存块)是可以重叠的。//打印数组要带下标!//打印数组要带下标!////如果源空间和目标空间出现重叠,就得使用memmove函数处理。////模拟实现memmove。

2023-12-28 15:53:19 507

原创 用C语言写出一个模拟实现strstr函数的代码,返回类型为char*

/ if (*s2 == '\0')//*s2 == '\0'是为了说明s2已经全部找到才会等于\0,因此返回p(子字符串所在字符串的第一个字符的位置)////(字符中的元素是连续存放的,所以不会存在跳动存放的情况,例如a1="ababcd",a2="ac"此结果就是NULL)////情况2.arr1="ababcd"arr2="abc"(多次匹配才能找到)////情况1.arr1="abcd"arr2="abc"(一次匹配就找到了)//////模拟实现strstr。

2023-12-27 12:58:36 309

原创 strtok切割字符串函数

///2.strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置(第一个换成\0的位置的地址)开始,//// 在总字符串中找到一个标记,并把标记(分割符)的位置改成\0(把标记换成\0),换成\0就意味着更改了总字符串。//// 返回一个从被替换为\0的位置向左直至总字符串开头的位置中的这段字符串中的首字符的地址(即示例的z的地址)//// 所以在使用strtok函数切割的字符串时,创建变量并拷贝总字符串一个同于总字符串的可以修改的变量。

2023-12-26 16:15:48 331

原创 C语言库函数

2023-12-26 10:38:22 452

原创 转义字符及其作用

表3.1中列出的字符称为转义字符,意思是将“\”后面的字符转换成另外的意义。如“\n”中的“n”不代表字母n而是作为“换行”符。

2023-12-26 10:37:13 387

原创 用C语言写出一个模拟实现strncat函数的代码,返回类型为char*

这个代码实现了一个名为`strncat_simulation`的函数,它接受三个参数:目标字符串`dest`,源字符串`src`,以及最大连接长度`max_len`。函数首先将指针`start`指向目标字符串的起始位置,然后使用指针和循环找到目标字符串的结尾,并将源字符串的内容连接到目标字符串。连接后,函数添加一个字符串结尾标记,并返回连接后的字符串起始地址。在主函数中,我们使用示例字符串进行测试,并打印连接后的结果。// 将src字符串连接到dest字符串。// 寻找dest字符串的结尾。

2023-12-25 17:19:38 381

原创 C语言代码技巧分享

8. 优化代码性能: 在编写 C 语言代码时,需要考虑代码的性能,尽量减少不必要的操作和循环,避免使用低效的算法。7. 编写易于理解的代码: 虽然 C 语言的语法比较灵活,但是编写易于理解的代码可以提高代码的可读性和可维护性。9. 多练习和阅读优秀的代码: 最后,提高 C 语言编程能力的最好方法就是多练习和阅读优秀的代码。可以使用一些工具来检测内存泄漏和错误。3. 使用位运算: 位运算是 C 语言中一种快速处理二进制数据的方法,可以用于实现一些底层的操作,如状态标志的设置和清除、位字段的提取和组合等。

2023-12-25 11:43:29 678

原创 C语言操作符详情

“,”“||”为“是”

2023-12-25 09:06:54 370

原创 常用windows系统操作快捷键

Windows+Shift+M:还原最小化的窗口。Windows+R:开启“运行” 对话框。Windows+E:开启“资源管理器。Windows+F:查找文件或文件夹。Shift+F10 选中文件的右菜单。Windows+D:显示桌面和恢复。Windows+M:最小化所有窗口。Alt+空格+N 最小化当前窗口。Alt+空格+R 恢复最小化窗口。Alt+空格+X 最大化当前窗口。Alt+F4 关闭当前程序。Alt+空格+C 关闭窗口。Alt+回车查看文件属性。Ctrl+W 关闭程序。Ctrl+Y 反撤销。

2023-12-24 12:56:21 556

原创 常用VS编辑程序快捷键

编辑.当前行任意位置下开新行Ctrl + Shift + Enter在插入点之下插入一个空行。编辑.CTRL + TAB / CTRL + SHIFT +TAB逐个窗口地循环通过打开的多个编辑文件的MDI 子窗口。编辑.文档结尾 CTRL + END 将插入点快速移动到文档的最后一行。编辑.文档开始 CTRL + HOME 将插入点快速移动到文档首行。编辑.取消注释选定内容Ctrl + K,Ctrl + U。编辑.注释选定内容Ctrl + K,Ctrl + C。编辑.行尾 END 将插入点移动到行尾。

2023-12-24 12:55:02 654

原创 常用快捷键整理

(用加粗标注的是我个人使用时常用的,其实这个全凭个人喜好,大家可以熟悉一下自己喜欢的,都多试试,把觉得有用的记一下,多使用,后续写代码效率就会提高一些)常用VS运行调试程序快捷键。调试.清除所有断点 CTRL + SHIFT + F9 清除项目中的所有断点。调试.SHIFT + F11跳出执行当前执行点所处函数的剩余行。调试.启动调试并运行到断点位置:F5。运行.运行程序:Ctrl + F5。调试.结束调试:Shift +F5。调试.单步进入函数:F11。调试.单步执行:F10。

2023-12-24 12:54:15 379

原创 C语言语法中常用的一些部分的提要

对程序中用到的所有变量都需要进行定义。对数据要定义其数据类型需要时要指定其存储类别。(1)类型标识符可用1.int 整形 2.short 短整型3.long 长整型 4.unsigned 无符号常熟5.char 字符型 6.float 单精度浮点型7.double 双精度浮点型 8.struct 结构体名。

2023-12-24 12:53:35 512

原创 C语言格式说明大全

整型输出,通常用来输出int型(“%”与字母之间可以插入数字表示场宽,如%2d表示输出2位整型数,不够2位右对齐;用来输出小数,默认情况下保留小数点6位,如1.000000;通常用来输出float型,%.2f用来输出小数,保留两位小数,如1.00。是双精度浮点型,默认情况下保留小数点6位,通常用来输出double型。以十六进制数形式输出整数,或输出字符串的地址。用来输出字符串,通常用来输出char型。长整型输出,通常用来输出long型。用来输出字符,char型。以八进制数形式输出整数。以指数形式输出实数,

2023-12-24 12:52:58 572

原创 C语言中的关键字

缺点是struct内存空间的分配是粗放的,不管用不用,全分配。栈空间就是指放置程式的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足所造成的程式出错的问题,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。int代表有符号整数,也就是说,用int声明的变量可以是正数,可以是负数,也可以是零,但是只能是整数。数据类型表达的也是一个近似的数,不是准确的,小数点后的n位有误差,浮点数的位数越大,误差越大,到18位的时候,误差了1,基本上不能用了。

2023-12-24 12:51:42 1057

原创 字符函数和字符串函数

/ if (strlen("abc") - strlen("abcdef") > 0)//若需要strlen进行计算时,尽量使用比较大小,而不是差值。// //但是strlen计算字符串长度时,不包括\0,返回的是\0之前的字符个数(字符串中的叫字符,数组中的叫元素)////5)若拷贝的内容strcpy中(例如:strcpy(name,"abce\0ef"))源头的数据中含有‘\0’时,

2023-12-23 18:29:06 408 1

原创 实现strlen函数的三种方法:1.计数器法 2.递归法 3.指针减指针法

///首先需要明确,指针减去指针得到的是什么?////////递归法的主要思想就是要判断第一字符是不是\0,如果不是就1 + 下一次函数实现,总的来说就是大事化小的思想。////计数器法应该是最常见的strlen实现方法,其基本原理就是通过计数器计算循环的次数,从而实现计算字符串长度的作用。//////————————————实现strlen函数的三种方法。////用指针减指针来实现strlen的功能。//////递归实现strlen。////////2.递归法。////3.指针减指针法。

2023-12-22 15:25:02 979

原创 pip的基本命令和使用

使用 pip install 命令可以安装一个或多个包。你可以指定包的名称,也可以使用 --requirement 标志来安装包含多个包的要求文件。PIP 是 Python 的包管理工具,它可以方便地安装、升级和删除 Python 包。PIP 提供了方便的包管理功能,可以帮助你轻松管理 Python 项目的依赖项。使用 pip show 命令可以查看已安装包的信息,包括版本号、安装路径等。使用 pip uninstall 命令可以删除已安装的包。使用 pip list 命令可以查看已安装的包及其版本。

2023-12-21 09:36:13 557

原创 NPM的介绍和使用

你可以指定模块的名称,也可以使用 --save 或 --save-dev 标志将模块添加到 package.json 文件的依赖项中。4. 发布模块:如果你开发了自己的模块,可以使用 npm publish 命令将其发布到 NPM 仓库,以便其他人可以使用。6. 创建私有仓库:除了使用公共的 NPM 仓库,你还可以创建自己的私有仓库来管理内部项目的模块。- 除了使用公共的 NPM 仓库,你还可以创建自己的私有仓库来管理内部项目的模块。- 使用 npm list 命令可以查看当前项目中已安装的模块。

2023-12-21 09:34:16 367

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除