c语言基础学习
guotianqing
这个作者很懒,什么都没留下…
展开
-
Linux下c/c++头文件和库文件的查找路径
简介这是个相当基础的话题,平时也觉得知道一点。如头文件会先在当前目录查找,如果未找到会查找系统目录。但当问题出现时,还是有点不知所措,对所谓的“系统目录”一知半解,很难把它们的清楚完整地梳理出来。借此时机,梳理一下。头文件一般有两种形式的写法:双引号和尖括号,如下:#include <iostream>#include "demo.h"当然也可以直接写绝对路径,那...原创 2020-02-08 16:11:17 · 26165 阅读 · 2 评论 -
switch与if-else-if区别与应用实践
相同及区别switch和if-else-if是c/c++中的两种分支语句,它们的功能基本相同,都是判断条件后执行相应的动作。当然它们也有区别,不然为什么同一件事情要用两种不同的方法来做呢?if-else if-else if-else语句:可以是任何条件语句、变量或者表达式运行时顺序检查所有的条件,直到匹配发生,执行语句并跳过后续switch case语句:只适用于待判断的条...原创 2019-12-23 16:18:09 · 1884 阅读 · 0 评论 -
rapidjson使用简介
简介在c++中用来解析Json的库很多,如Jsoncpp。我之前也使用Jsoncpp来做Json解析,但自从接触rapidjson后,特别是尝试使用之后,便决定以后就使用它了,要与Jsoncpp说拜拜。使用Jsoncpp的同学不妨尝试一下,不管在易用性还是性能方面,rapidjson都是可圈可点的。RapidJSON 是一个 C++ 的 JSON 解析器及生成器。它的灵感来自 Rapid...原创 2019-08-12 18:35:29 · 2763 阅读 · 0 评论 -
linux c 线程池简介
概述在服务器开发过程中,使用并行/并发编程是经常会遇到的事情。基于进程的服务器和基于线程的服务器的区别就不详述了,这里简介一下多线程的优缺点:优点:多个线程同时执行,提高了程序的执行效率提高了资源利用率缺点:线程越多,cpu调度的开销越大程序的复杂度上升使用线程池的优点:创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率线程并发数量过...原创 2019-03-31 15:10:18 · 3867 阅读 · 1 评论 -
atoi精简实现
问题描述实现一个 atoi 函数,使其能将字符串转换成整数。要求如下:该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽...原创 2019-02-24 21:57:11 · 1429 阅读 · 0 评论 -
safe_free不safe——如何正确free动态分配的存储空间
简介与java等语言不同,c语言编码中需要手动管理使用的内存。这增加了程序对内存使用和管理的灵活性,但也增加了程序员的负担。在使用内存时可以使用malloc()簇函数,使用完毕后务必手动使用free()释放内存,否则内存泄漏可能导致服务崩溃。safe_free不safe之前在程序中看到有人使用自己封装的safe_free函数,实现如下:static void safe_...原创 2018-08-23 21:29:42 · 1802 阅读 · 1 评论 -
gcc常用编译选项简介
注:关于gcc的详细使用说明,请man gcc查阅gcc是什么gcc是GNU Compiler Collection的缩写,它包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的库和前端。gcc最初是给GNU操作系统编写的编译器,GUN系统是完全自由开放的软件。GCC支持几乎所有的操作系统平台和硬件。本文侧重点在于使用gcc编译linux下的c程...原创 2018-06-01 22:11:38 · 3447 阅读 · 0 评论 -
strcmp/strncmp导致的段错误浅析
引出问题项目中有如下代码片段:#include &lt;stdio.h&gt;#include &lt;string.h&gt;struct st { char *buf; int buflen;};static void st_test(struct st *st){ char *msg = "abc"; /* 若注释下行代码会导致段错误...原创 2018-05-11 20:46:09 · 7629 阅读 · 1 评论 -
文件锁的使用浅析
概述在多数unix系统中,当多个进程/线程同时编辑一个文件时,该文件的最后状态取决于最后一个写该文件的进程。对于有些应用程序,如数据库,各个进程需要保证它正在单独地写一个文件。这时就要用到文件锁。文件锁(也叫记录锁)的作用是,当一个进程读写文件的某部分时,其他进程就无法修改同一文件区域。能够实现文件锁的函数主要有2个:flock和fcntl。早期的伯克利版本只支持flock,该...原创 2018-04-22 22:27:23 · 21498 阅读 · 2 评论 -
c语言中static关键字用法详解
概述static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护。但是对于c语言初学者,static由于使用灵活,并不容易掌握。本文就static在c语言中的应用进行总结,供参考使用。错漏之处,请不吝指正。在程序中使用static变量1. 局部变量普通局部变量是再熟悉不过的变量了,在任何一个函数内部定义的变量(不加static修饰...原创 2018-04-05 18:18:14 · 684078 阅读 · 58 评论 -
c语言中动态库的使用(启动时链接和运行时链接)
背景c语言中存在静态库(.a)和动态库(.so)。静态库实际上是一些目标文件的集合,只用于链接生成可执行文件阶段。链接器会将程序中使用到函数的代码从库文件中拷贝到应用程序中,一旦链接完成生成可执行文件之后,在执行程序的时候就不需要静态库了。特性: 由于每个使用静态库的应用程序都需要拷贝所用函数的代码,所以静态链接的生成的可执行文件会比较大,多个程序运行时占用内存空间比较大(每个...原创 2018-04-01 13:00:41 · 22452 阅读 · 3 评论 -
c语言中指针与数组的异同分析
一、背景先来个问题,下面的一段代码编译时会存在问题吗?#include <stdio.h>#include <string.h>int main(void){ unsigned char a[2]; bzero(a, sizeof(a)); if (a) { printf("a is valid!\n");...原创 2018-03-25 17:04:41 · 2092 阅读 · 0 评论 -
c/c++语言中const限定符使用
const是干什么的定义 When modifying a data declaration, the const keyword specifies that the object or variable is not modifiable. When following a member function’s parameter list, the const keyword ...原创 2018-04-07 18:57:51 · 663 阅读 · 0 评论 -
数组分配内存过大导致SIGSEGV信号(段错误)
一、背景今天codding的时候,发现一个段错误。-> % ./a.out 9000000the size is: 0x895440[2] 10558 segmentation fault (core dumped) ./a.out 9000000打印跟了一下程序,段错误发生在定义数组的时候,感觉程序没毛病,就使用gdb跟了一下,效果如下:(gdb) r ...原创 2018-03-16 20:46:06 · 28092 阅读 · 1 评论 -
select, poll, epoll使用介绍与区别浅析
一、背景介绍用户空间与内核空间Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,现在操作系统都是采用虚拟存储器,针对32位linux操作系统而言,将最高的1G字节(从虚拟地址0xC0原创 2017-11-19 21:25:06 · 611 阅读 · 0 评论 -
c语言中 char* 和 unsigned char* 的区别浅析
背景最近在项目中遇到了一个编译警告,是因为定义的变量为char[],而在使用时作为函数的unsigned char*类型的参数调用。这个警告很容易避免,但是char*和unsigned char*到底有什么区别呢,本文作一个简单的探讨。char 和 unsigned char 的区别在C中,默认的基础数据类型均为signed,如定义变量为int,long等,都为有符号的。如果要定义无符号类型,必须显原创 2017-08-17 21:43:47 · 113733 阅读 · 5 评论