![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 80
文曲尽墨琛乃缺
江天一色无纤尘,鱼龙潜跃观道身
天人焉有两般义,道不虚行只在人。
展开
-
段错误以及调试方法
一.段错误产生的原因段错误就是访问了不可访问的内存,出现了运行时出现了segmentation fault的报错产生的原因:访问不存在的内存地址、访问系统保护的内存地址 、访问只读的内存地址、空指针废弃(eg:malloc与free释放后,继续使用)、堆栈溢出、内存越界(数组越界,变量类型不一致等)二. 使用GDB逐步查找段错误首先加上命令行得先加上-g -rdynamic的参数进行编译,eg:gcc -g rdynamic xxx.c 随着gdb ./a.outeg:三. 分析core原创 2021-08-12 19:40:40 · 11353 阅读 · 0 评论 -
C 内存管理
一.内存中的数据位置未初始化的全局变量(.bss段)(1)bss段用来存放那些没有初始化和初始化为0的全局变量(2)特点:bss类型的全局变量只占运行时的内存空间,而不占用文件空间(3)现代大多数操作系统,在加载程序时,会把所有的bss全局变量清0(4)作为全局变量,在整个程序的运行周期内,bss数据是一直存在的(5)为保证程序的可移植性,手工把这些变量初始化为0也是一个好习惯,这样这些变量都有个确定的初始值初始化过的全局变量(.data)(1)data段用来存放那些初始化为非零的全原创 2021-08-10 19:51:03 · 251 阅读 · 0 评论 -
数据结构(八)队列(链式)实现的功能
头文件#ifndef LINKQUEUE_H#define LINKQUEUE_H#include<stdio.h>#include<stdlib.h> #define SUCCESS 10000#define FAILURE 10001#define TRUE 10002#define FALSE 10003struct QueueNode ...原创 2019-08-09 21:13:48 · 240 阅读 · 0 评论 -
linux系统编程(一)文件编程
简介:Linux一点哲学,“一切皆为文件”;在Linux中对目录和设备的操作都等同于对文件的操作,都是使用文件描述符来进行的。Linux文件可分为:普通文件,目录文件,链接文件,设备文件;Linux系统调用及用户编程接口(API) :所谓系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的的服务由于在Linux中,为了更好地保护内核空...原创 2019-08-14 14:19:07 · 370 阅读 · 0 评论 -
Linux系统编程(二)进程控制编程
进程的定义:进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元程序是指放到磁盘的可执行文件进程是指程序执行的实例 (./xxx)进程与程序的区分:进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制进程是暂时的,程序使长久的:进程是一个状态变化的过程,程序可长久保存进程与程序组成不...原创 2019-08-17 20:20:24 · 272 阅读 · 0 评论 -
Linux系统编程(三)进程间通信
进程间通信概述1.数据传输一个进程需要将它的数据发送给另一个进程2.资源共享多个进程之间共享同样的资源3.通知事件一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件4.进程控制有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变现在Linux使用的进程间通信方式包括:1、管道(pipe)和...原创 2019-08-18 10:51:23 · 358 阅读 · 0 评论 -
Liunx系统编程(五)网络编程
协议栈:Linux的优点之一就是在于它丰富而稳定的网络协议栈,其范围是从协议无关层(如通用的socket层接口和设备层)到各种网络协议的实现。对于网络理论介绍一般采用OSI模型,但是Linux中网络栈的介绍一般分为四层的Internet模型网络模型为:TCP/IP协议族系结构数据链路层:数据链路层实现了网卡接口的网络驱动程序,以处理数据在网络媒介上(比如以太网)上的传输。不同的物理...原创 2019-08-27 14:00:04 · 173 阅读 · 0 评论 -
C语言练习题:寻找字符串中的子串的存在的次数
#include<stdio.h>#include<stdlib.h>#include<string.h>void Count (char *str, char *s) //指针方式{ int i, count = 0; int length1 = strlen(str), length2 = strlen(s); for(i = 0; i ...原创 2019-09-22 21:44:50 · 369 阅读 · 0 评论 -
C语言:字符串的逆序
#include<stdio.h>#include<string.h>#include<stdlib.h>void Reverse(char *s) //指针方式{ int i; int length = strlen(s); char *end = s + length - 1; char ch; for(i = 0; i <...原创 2019-09-22 22:01:14 · 446 阅读 · 0 评论 -
C语言:字符串空格单词形式的反转
eg : 输入 Are you pig? 输出 pig? you Are#include<stdio.h>#include<string.h>void Reverse(char *s){ int i, length = strlen(s); char *end = s + length - 1; char ch; for(i = 0; i < l...原创 2019-09-22 22:23:33 · 407 阅读 · 0 评论 -
C语言字符串:寻找合法帧
输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来eg: 帧头和帧尾分别是head和tail 字符串 “asdasheadsfsafsafsfastail”中headsfsafsafsfastail是合法帧#include<stdio.h>#include<stdlib.h>#include<string.h>/*函...原创 2019-09-26 22:02:41 · 336 阅读 · 0 评论 -
C语言:编写函数实现将一个整数转为任意进制的字符串输出
```c#include<stdio.h>#include<string.h>void change(char *s, int num, int n){ int i = 0; char temp; while(num != 0) { s[i] = num % n; if(s[i] <= 9) { s[i] = s[i] + '0...原创 2019-09-30 22:43:02 · 1211 阅读 · 0 评论 -
数据结构(七)队列(顺序)实现的功能
队列是特殊的线性表;队列仅在线性表两端进行操作;队头(Front):取出数据的一端;队尾(Rear):放入数据的一端;性质: 先进先出。长度= rear -front=(rear - front +size) %size SIZE是容量,上图中容量是11,长度10判断队满 : rear + 1 == front(rear + 1) % size == fron...原创 2019-08-08 20:46:55 · 295 阅读 · 0 评论 -
数据结构(六)栈(链表形式)实现的功能
链式栈的存储形式栈的链式存储结构:栈的链式存储结构,简称为链栈;栈顶放在单链表的头部;链栈是不需要头结点的。链栈不存在栈满的情况。头文件#ifndef LINKSTACK_H#define LINKSTACK_H#include <stdio.h>#include <stdlib.h>#include <time.h>#define...原创 2019-08-08 11:33:14 · 279 阅读 · 0 评论 -
C语言(一)数据类型与基本语句
一.数据类型1.分类类型2.数据类型的长度#include<stdio.h>int main (){ int a=1; printf("int %d\n",sizeof(a)); //sizeof是关键字,求数据类型的长度 printf("int %d\n",sizeof(int)); printf("char %d\n",sizeof(char)); pri...原创 2019-07-21 21:35:44 · 446 阅读 · 0 评论 -
C语言(三)指针(二)
1.指针函数和函数指针函数指针:把函数的这个首地址(或者入口地址)赋予一个指针变量,使用该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针称为“函数指针变量”。定义的一般形式: 类型说明符(*指针变量名)();简单一点就是说,函数指针通过指针变量找到函数的入口地址并调用函数。指针函数:在C语言中,允许一个函数的返回值是一个指针(即地址),这种返回指针的...原创 2019-07-31 18:50:53 · 245 阅读 · 0 评论 -
C语言(二)数组和函数
1.一维数组1.一维数组的定义格式为:类型说明符 数组名[常量表达式]; 例如: int a[10];它表示定义了一个整形数组,数组名为a,有10个元素。2.在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。3.常量表达式中可以包括常量和符号常量,但不能包含变量2.``冒泡法,选择法。#include<stdio.h> ...原创 2019-07-23 10:47:10 · 2580 阅读 · 1 评论 -
C语言(三)结构体与联合体
1.结构体的概念结构体用struct 表示,结构体可以包含int原创 2019-07-27 13:48:15 · 300 阅读 · 0 评论 -
Linux系统编程(四)Linux多线程编程
进程和线程的区别进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间)。进程:进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元;进程是程序执行时的一个实例,即它是程序已经执行到某种程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。Linux系统是一个多进程的系统,它的进程之间具有并...原创 2019-08-19 20:41:20 · 310 阅读 · 0 评论 -
数据结构(九)二叉树
树的概念:树树(Tree)是n(n>=0)个结点的有限集。n=0的时候称为空树,在任意一颗非空树中:(1)有且仅有一个特定的称为根(root)的结点;(2)当n>1时,其余结点可以分为m(m>0)个互不相交的有限集T1、T2、T3…Tm,其中,每一个集合本身又是一棵树,并且称为跟的子树。结点:树的结点包含一个数据元素及若干个指向其子树的分支。度:结点拥有的子树称为结点...原创 2019-08-10 15:09:12 · 285 阅读 · 0 评论 -
数据结构(一)线性表(顺序表实现的功能)
头文件#ifndef SEQUENCELIST_H#define SEQUENCELIST_H //必须和上面的一模一样,而且是大写#include<stdio.h>#include<stdlib.h>#include<time.h> //用到的头文件#define SIZE 10 #define SUCCESS 10000...原创 2019-08-02 09:23:20 · 565 阅读 · 1 评论 -
数据结构(二)线性表(链表实现的功能)
链表链接表是线性表的链接储存表示。特点:每个元素(表项)由结点(Node)构成。一个元素有8byte;4byte的数据,4byte的指针(存放下一个节点的地址)4byte date | link 4byte线性结构 :结点可以连续,可以不连续存储结点的逻辑顺序与物理顺序可以不一致表可扩充头文件#ifndef LINKLIST_H#define LINKLI...原创 2019-08-04 17:03:02 · 336 阅读 · 0 评论 -
数据结构(三) 双向链表的功能实现
双向链表是指在前驱和后继方向都能游历(遍历)的线性链表。双向链表每个结点结构:前指针域 prior | 数据域data | 后指针域 next前指针指向前驱方向,上一个结点;后指针指向后继方向,也就是下一个结点。这样指针就可与任意访问后面或者前面的,指针就可以不受单链表的约束,向前或向后移动。双向链表通常采用带表头结点的循环链表形式。头文件#ifndef DOUBLELINKLI...原创 2019-08-06 22:41:10 · 217 阅读 · 0 评论 -
数据结构(四)线性表中链表:双向循环链表功能的实现
循环链表是单链表的变形。循环链表最后一个结点的 link 指针不 为NULL,而是指向了表的前端。(指向头结点)为简化操作,在循环链表中往往加入表头结点。循环链表的特点是:只要知道表中某一结点的地址,就可搜寻到所有其他结点的地址。结构特点:头文件#ifndef CIRCLEDOUBLELINKLIST_H#define CIRCLEDOUBLELINKLIST_H 4 ...原创 2019-08-06 23:31:02 · 370 阅读 · 0 评论 -
数据结构(五)(顺序)栈实现的功能
栈是一个特殊的线性表,只能在一端操作;栈顶(top):允许操作 的一端;栈底(bottom):不允许操作的一端栈的性质: 先进后出,后进先出.1.栈是限定仅在表尾进行插入和删除操作的线性表;又称 后进先出的线性表。LIFO结构。栈顶top:允许插入和删除的一端;栈底bottom:另外一端;2. 空栈:不含任何数据元素的栈;top=-1;3. 栈的操作:进栈,压栈,入栈...原创 2019-08-08 10:30:08 · 218 阅读 · 0 评论 -
c语言(三) 指针(一)
1.外部变量外部static , extern存储方式 : 静态存储区: 静态存储区生存区: 程序整个运行期间作用域: 本文件 , 其他文件赋初值 : 编译时赋值,只赋一次未赋初值: 自动赋初值0或者空字符自动变量是最常用的。 关键字auto能够显式地指定存储类别。显式定义 auto int x,y;隐含定义 等价 int x,y;实际...原创 2019-07-25 14:47:33 · 402 阅读 · 0 评论