- 博客(27)
- 收藏
- 关注
原创 assert()函数
assert()函数函数定义函数原型:void assert( int expression )assert宏的原型定义在<assert.h>中。参数:expression为一个条件表达式,取值 真或假。功能:如果形参为真,程序继续执行,不做任何事;如果形参数为假,assert 向 stderr打印一条出错信息,包含文件名、表达式、行号,然后调用abort终止程序。使用void MyPrint(int *value){ assert(value!=NULL); //如
2022-05-03 15:23:20
154
原创 C语言常见错误: warning: function returns address of local variable
warning: function returns address of local variable 错误原因:函数返回了局部变量(函数中的局部变量存放在stack中,函数执行完成之后会自动释放,因此不应将局部变量的指针作为返回值。)例:在函数int_to_str()中返回了buf此局部变量。char* *int_to_str(int value){ char buf[20]; sprintf(buf,"%d",value); return buf;}解决将局部变量声明为st
2022-05-03 14:12:13
2260
原创 TinyHttpd运行与源码注释
TinyHttpd运行与源码注释运行修改makefileall: httpd# 注释掉 -lsocketLIBS = -lpthread #-lsocket httpd: httpd.c gcc -g -W -Wall $(LIBS) -o $@ $<clean: rm httpd修改cgi文件解决警告源码注释
2022-04-17 22:31:51
1091
4
原创 getline读取多行
getline读取多行几点说明:cin>> s 是无法读入换行和空格当前面的cin>>w;输入数字之后,数字存储在输入缓冲区,敲回车,输入的数字因为回车的原因传给了w,但是换行符仍然滞留在输入流了,如果在cin>>w 后面有着getline语句,这个换行符就被这个getline读取了,发现getline结果为空cin.getline()不会把’\0’, ‘ ‘, ‘\n’等默认的分隔符写入到字符数组,因此如果在cin>>w后面紧接着的cin
2022-03-23 21:28:29
1477
原创 select、poll、epoll简单总结
select、poll、epoll简单总结1.socketsocket用于表示进程间通信的特殊文件类型类型,其本质是内核借助缓冲区形成的伪文件。socket = IP地址(唯一标识一台主机) + 协议 + 端口号(一台主机中唯一标识一个进程)2. socket创建TCP的流程3. select()/poll()/epoll()3.1 select()select()函数原型int select(int nfds, // 监控的文件描述符集中最大的加一 fd_set*
2022-03-08 20:36:07
183
转载 动态库与静态库
静态链接库静态链接库实现链接操作的方式很简单,即程序文件中哪里用到了库文件中的功能模块,GCC 编译器就会将该模板代码直接复制到程序文件的适当位置,最终生成可执行文件。使用静态库文件实现程序的链接操作,既有优势也有劣势:优势是,生成的可执行文件不再需要任何静态库文件的支持就可以独立运行(可移植性强);劣势是,如果程序文件中多次调用库中的同一功能模块,则该模块代码势必就会被复制多次,生成的可执行文件中会包含多段完全相同的代码,造成代码的冗余。和使用动态链接库生成的可执行文件相比,静态链接库生成的可执
2021-12-01 22:02:53
1850
原创 Git创建个人主页和项目主页
Git创建个人主页和项目主页搭建个人主页搭建步骤1)创建个人站点 -> 新建仓库(注:仓库名必须是【用户名.github.io】)2)在仓库下新建index.html的文件即可。访问访问地址:https://用户名.github.io注:1、github pages 仅支持静态网页2、仓库里面是.html文件3、个人主页也可以设置主题。搭建项目主页搭建步骤1)进入项目主页,点击settings2)在settings页面,点击【Launch automatic
2021-11-29 16:27:42
688
原创 GDB调试场景
GDB调试场景gdb的调试对象,在编译的时候需要加“-g”参数。 gcc -g 源文件.c -o 可执行文件1.调试普通执行文件 gdb 可执行文件名例: gdb a.out2.调试core文件1.什么是core文件?有问题的程序运行后,产生“段错误 (核心已转储)”时生成的具有堆栈信息和调试信息的文件。2.怎样配置生成 core 文件(1) core文件开关①使用 ulimit -c 查看core开关,如果为0表示关闭,不会生成core文件;②使用 ulim
2021-11-26 17:10:26
184
原创 GCC总结
GCC总结1.GCC简介发展至今,GCC 编译器已经发展完善,其功能也由最初仅能编译 C 语言,扩增至可以编译多种编程语言,其中就包括 C++ 。除此之外,当下的 GCC 编译器还支持编译 Go、Objective-C,Objective-C ++,Fortran,Ada,D 和 BRIG(HSAIL)等程序,甚至于 GCC 6 以及之前的版本还支持编译 Java 程序。2.gcc对比g++我们更习惯使用 gcc 指令编译 C 语言程序,用 g++ 指令编译 C++ 代码。需要强调的一点是,
2021-11-25 17:25:24
570
原创 C++基础面试总结(二)
C++基础面试总结(二)1.c++内存管理在C++中内存分为5个区,分别是堆、栈、自由存储区、全局/静态存储区和常量存储区、代码区。堆:(new/delete)堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减,且向上增长。一般由程序员手动分配释放,如果没手动释放,在程序结束时可能由OS释放。栈:存储函数的返回地址、参数、局部变量、返回值。自由存储区:malloc/free操作的内存,与堆相似。数据区:数据区包含全局/静态存储区和常量存储区,存储已初始化的全局变量和静态
2021-11-25 14:33:22
503
原创 C++基础面试总结(四)
C++基础面试(四)STLSTL六部分:迭代器、容器、算法、仿函数、适配器、空间配制器(allocator)1.容器vector:底层数据结构为数组,支持快速随机访问。list:底层数据结构为双向链表,支持快速增删。set:底层数据结构为红黑树,有序,不重复。multiset:底层数据结构为红黑树,有序,可重复。map:底层数据结构为红黑树,有序,不重复。multimap:底层数据结构为红黑树,有序,可重复。//在C++11之前命名为hash_unordered_set:底层数
2021-11-24 22:07:34
604
原创 C++基础面试总结(三)
C++基础面试总结(三)1.C++11新特性头文件引入改变。新式#include< cstdio> 旧式 #include<stdio.h>;使用nullptr替代NULL;auto 和 decltype 这两个关键字实现了类型推导;C++11 引入了基于范围的迭代写法,比如基于范围的for循环,用一个冒号就可实现遍历,我们拥有了能够写出像 Python一样简洁的循环语句(foreach);加入了 =delete 和 =default;右值引用:移动语义、完美转发;
2021-11-24 17:32:45
699
原创 C++基础面试总结(一)
C++基础面试总结(一):1. C和C++的区别C是面向过程的语言,C++是面向对象的语言;C++三大特性。继承(提高代码复用性)、封装(隐藏对象属性和细节,对外提供访问方式)、多态(提供接口,扩展)动态内存管理的方法不同。C是使用malloc/free库函数,而C++除此之外还可以使用new/delete关键字。C中的结构体struct和C++的类的区别。C++的类独有的,类的相关知识点(巴拉巴拉),C没有,但C中的struct可以在C++中正常使用,且C++对struct进行了扩展。C++
2021-11-24 11:55:03
540
原创 GO语言随笔(一)
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2021-11-23 17:21:46
245
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人