
C编程
文章平均质量分 74
Keson
<< Kernel & Algorithm >>
展开
-
SSCANF用法详解
<br />名称: sscanf() - 从一个字符串中读进与指定格式相符的数据. 编辑本段函数原型:<br /> Int sscanf( const char *, const char *, ...); <br /> int scanf( const char *, ...); 编辑本段头文件:<br />#include<stdio.h>编辑本段说明:<br />sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。 第一个参数可以是转载 2010-12-09 11:00:00 · 814 阅读 · 0 评论 -
printf输出格式
C中printf()的参数是什么?printf的格式控制的完整格式: % - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少。 ②-:有-表示左对齐输出,如省略表示右对齐输出。 ③0:有0表示指定空位填原创 2011-08-17 14:43:11 · 868 阅读 · 0 评论 -
关于回溯算法的递归与非递归解法
<br />摘要:本文简要描述了回溯算法的基本思路,并给出了几个典型实例的源码<br />关键字:回溯,搜索,非递归,全排列,组合,N皇后,整数划分,0/1背包<br />回溯是按照某种条件在解空间中往前试探搜索,若前进中遭到失败,则回过头来另择通路继续搜索。<br />符号声明:<br />解空间:[a1,a2,a3,...,an];<br />x[k]为解空间元素的索引, 0 <= x[k] < n;k为数组x的索引;<br />a[x[0~n-1]]表示一组解。<br />//判断解空间中的a[x[k原创 2011-05-30 16:35:00 · 8343 阅读 · 0 评论 -
关于全排列组合算法
全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为例说明如何编写全排列的递归算法。1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。由于一个数的全排列就是其本身,从而得到以上结果。2、再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4 3 5、 4 5 3、 5 3 4、 5 4 3 六组数。即以3开头的和4,5的全排列的组合、以4开头的和3,5的全排列的组合和以5开转载 2011-05-25 11:22:00 · 1872 阅读 · 0 评论 -
KMP算法研究
KMP算法,网上有很多版本,我看了一些,大都不太满意。所以自己写了一个,跟网上的都不一样。但KMP算法的思路肯定是一样的(毕竟这算法是人家想出来的,我只是用了我个人的风格去实现,愿多提宝贵意见)。 其实KMP算法很简单,书上和网上的讲解大多都力求精细,我觉得这只能做个参考。初学者一般还是要有人来点拨和自己揣摩。现在,我搞懂了KMP算法,我就可以说出KMP算法的要害。好啦,废话少说,转入正题。 KMP算法的要害就是: GetNext()函数。它就是要获取下一个要比较的模式串中的位置。抓住这个要害不转载 2011-05-24 14:42:00 · 652 阅读 · 0 评论 -
Linux操作系统的内存使用方法详细解析
<br />我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用。 <br /><br /> 一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。 <br /><br /> Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用实际物理内存;一级是具体的物理页面,它对应我们机器上的物理内存。 <br /><br /> 这里要提到一个很重要的概念,内存的延迟分配。转载 2011-05-16 17:15:00 · 1109 阅读 · 1 评论 -
环形缓冲区
<br />为了防止有人给咱扣上“过度设计”的大帽子,事先声明一下:只有当存储空间的分配/释放非常频繁 并且确实产生了明显 的影响,你才应该考虑环形缓冲区的使用。否则的话,还是老老实实用最基本、最简单的队列缓冲区 吧。还有一点需要说明一下:本文所提及的“存储空间 ”,不仅包括内存,还可能包括诸如硬盘之类的存储介质。<br /> ★环形缓冲区 vs 队列缓冲区 <br /> ◇外部接口相似<br /> 在介绍环形缓冲区之前,咱们先来回顾一下普通的队列。普通的队列有一个写入端和一个读出端。队列为空的时候,转载 2011-02-22 11:23:00 · 4883 阅读 · 1 评论 -
pthread_join函数及linux线程
<br />这是从网上搜索到的,为了方便以后查询,所以就把它拿到自己的空间里来了。谢谢原作者!!^^<br />pthread_join函数及linux线程<br /> <br />pthread_join使一个线程等待另一个线程结束。<br /> <br />代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行。<br /> <br />所有线转载 2011-02-21 14:02:00 · 629 阅读 · 0 评论 -
关于pthread_cond_wait
<br />了解 pthread_cond_wait() 的作用非常重要 -- 它是 POSIX 线程信号发送系统的核心,也是最难以理解的部分。 <br /><br />首先,让我们考虑以下情况:线程为查看已链接列表而锁定了互斥对象,然而该列表恰巧是空的。这一特定线程什么也干不了 -- 其设计意图是从列表中除去节点,但是现在却没有节点。因此,它只能: <br /><br />锁定互斥对象时,线程将调用 pthread_cond_wait(&mycond,&mymutex)。pthread_cond_wait转载 2011-02-21 11:28:00 · 395 阅读 · 0 评论 -
POSIX定时器
POSIX定时器:timer_settime()(2010-06-12 09:25:33)转载标签:杂谈分类:Linux<br /> 最强大的定时器接口来自POSIX时钟系列,其创建、初始化以及删除一个定时器的行动被分为三个不同的函数:timer_create()(创建定时器)、timer_settime()(初始化定时器)以及timer_delete(销毁它)。<br /> <br />创建一个定时器:int timer_create(clockid_t clock_id, struct sigev转载 2011-02-17 17:36:00 · 945 阅读 · 0 评论 -
C语言实现二进制文件读写
先介绍函数,我们一共要用到三个函数,fopen,fread,fwrite。二进制读写的顺序是用fopen以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中。下面我们看看一个拷贝程序的源码:<br /> Copy.c:<br />#include <stdio.h> <br />#include <stdlib.h> <br /> <br />#define MAXLEN 1024 <br /> <br />int main(int argc, char *argv[])转载 2011-03-01 17:49:00 · 929 阅读 · 0 评论 -
linux coredump配置与调试
<br />Linux<br />Core Dump 配置与调试<br />1.core文件的生成开关和大小限制<br />---------------------------------<br />1)使用ulimit<br />-c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。<br />2)<br />使用ulimit<br />-cfilesize命令,可以限制core文件的大小(filesize的单位为kbyte)。若ulimit<br />-cunli转载 2011-02-28 11:23:00 · 460 阅读 · 0 评论 -
getc函数详解
函数名: getc <br />功 能: 从流中取字符 <br />用 法: int getc(FILE *stream); <br />程序例: <br /><br />#include <stdio.h> <br /><br />int main(void) <br />{ <br />char ch; <br /><br />printf( "Input a character: "); <br />/* read a character from the <br />standard input s原创 2011-03-02 13:43:00 · 6025 阅读 · 0 评论 -
++循环与i--循环的执行效率
<br />问题一:i++和++i的效率比较<br /> <br /> <br />i++和++i涉及到计算机CPU的寄存器问题,i++实际是将i的值保存到CPU寄存器中,然后将内存中的i做其他操作后对寄存器中的i+1后覆盖内存中的i;而后者同样保存在寄存器中,将寄存器中的i+1后先覆盖内存中的i,然后再用其参与其他运算。<br />我建议最好以后写到这种语句的时候都独立成一行代码写,这样能避免很多错误的发生。<br /> <br />C++中i++和++i的效率s:<br />这个问题是分两种情况的:<b原创 2011-02-24 11:04:00 · 948 阅读 · 0 评论 -
Socket & Select
以下是我写的socket服务器端的代码,使用select接受连接,#include #include #include #include #include #include #include #include #include #include #include #include #define D_LINE(_STR_) printf("f:%s(l:%d)-fn:%s():%s/n",__FILE__,__LINE__,__FUNCTION__,_STR_);#define SERVER_PORT 10原创 2010-11-25 09:41:00 · 813 阅读 · 0 评论 -
sprintf的使用
<br />sprintf用来格式化输入时,如果出现段错误时,看看分配的空间是足够,改大一些试试,sprintf内部不对做安全性检查,有可能直接对错误的地址进行操作,所以容易产生段错误!原创 2011-01-11 16:39:00 · 692 阅读 · 0 评论 -
网络字节顺序和主机字节顺序的转换(htons ntohs htonl ntohl)
什么是网络字节顺序和主机字节顺序呢?在进行网络编程时,需要进行转换以统一“格式”简述:网络字节顺序NBO(Network Byte Order):按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。主机字节顺序(HBO,Host Byte Order):不同的机器HBO不相同,与CPU设计有关详解:不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序最常见的有两种1. Little endian:将低序字节存储在起始地址2. Big en转载 2010-12-23 21:36:00 · 2947 阅读 · 2 评论 -
strtok
strtok 原型:extern char *strtok(char *s, char *delim); 用法:#include <string.h> 功能:分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串。 说明:首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL。 strtok在s中查找包含在delim中的字符并用NULL('/0')来替换,直到找遍整个字符串。 返回指向下一个标转载 2010-12-09 11:08:00 · 527 阅读 · 0 评论