C
文章平均质量分 72
B_H_L
这个作者很懒,什么都没留下…
展开
-
哈夫曼树与哈夫曼编码
在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN)树和哈夫曼编码。哈夫曼编码是哈夫曼树的一个应用。哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码。 首先介绍什么是哈夫曼树。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的 路径长度(若根结点为0层,叶结点到根结转载 2016-04-19 21:40:36 · 1185 阅读 · 0 评论 -
C函数printf中不能使用%lf,而用%f输出double,而函数scanf却必须用%lf来输入double
转载 2012-08-17 15:18:59 · 3053 阅读 · 0 评论 -
C函数返回局部变量
一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指向栈内存的指针(注意转载 2012-08-27 10:51:39 · 1258 阅读 · 0 评论 -
C关于类型限定符const的2个典型错误!
转载 2012-08-17 09:54:43 · 1106 阅读 · 0 评论 -
C typedef与#define区别
补充:转载:关于typedef的用法总结 不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引转载 2012-07-23 16:08:35 · 622 阅读 · 0 评论 -
C结构体边界对齐1
许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是所谓的内存对齐,而这个k则被称为该数据类型的对齐模数(alignment modulus)。当一种类型S的对齐模数与另一种类型T的对齐模数的比值是大于1的整数,我们就称类型S的对齐要求比T强(严格),而称T比S弱(宽松)。这种强制的要求一来简化了处理器与内存之间传转载 2012-07-11 22:06:35 · 1517 阅读 · 0 评论 -
C获取系统是32位还是64位
方法一:typedef int type;#define OS_BITS (((int)((type *)0 + 1)) 方法二:#include #include char buf[17];int main(int argc, char* argv[]){ int *p=(int *)-1; sprintf(buf,"%X",p)转载 2012-07-08 11:15:26 · 2583 阅读 · 0 评论 -
C回调函数和转换表
补充:上面的回调函数中,若回调函数的定义中参数与调用回调函数的函数中回调函数的声明的参数类型不一致,则需强制转换:例子:ANSI C中使用qsort()排序 并 用 bsearch()搜索是一个比较常用的组合,使用方便快捷。功 能: 使用快速排序例程进行排序用 法: void qsort(void *base, int nelem, int width, int (*fcm转载 2012-07-13 22:03:56 · 815 阅读 · 0 评论 -
字符集及其编码
编码指不同国家的语言在计算机中的一种存储和解释规范 ANSI(American National Standards Institute的缩写)与ASCII(American Standard Code for Information Interchange的缩写) 最初,Internet上只有一种字符集——ANSI的ASCII字符集(American Standard转载 2012-08-21 15:06:59 · 791 阅读 · 0 评论 -
C标准库函数
转载 2012-07-17 18:08:51 · 637 阅读 · 0 评论 -
C无符号数和有符号数探讨
C 、C++都支持有符号(默认)和无符号数,java只支持有符号数。整数表示:无符号整数:无符号编码 有符号数:补码(范围不对称),| TMIN |=| TMAX |+1C语言标准并没有要求用补码形式来表示有符号数,但是几乎所有的机器都是这么做的C标准只规定了每种数据类型必须能够表示的最小的取值范围而不是确定范围。long long是ISO原创 2012-08-23 15:30:44 · 4799 阅读 · 1 评论 -
C 字节序
字节序是指多字节数据在计算机内存中存储顺序存在两种字节顺序:NBO与HBO 网络字节顺序NBO(Network Byte Order): 按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。 主机字节顺序HBO(Host Byte Order): 不同的机器HBO不相同,与CPU设计有关 计算机数据存储有两种字节优先顺序:高位字节优先和转载 2012-08-16 21:17:55 · 2985 阅读 · 0 评论 -
C函数printf和函数scanf的转换说明符中实现可变的字段宽度
printf实现可变的字段宽度:scanf实现可变的字段宽度:注:转义字符所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了转义字符意义ASCII码转载 2012-08-17 16:35:37 · 2067 阅读 · 0 评论 -
C语言内存分配
C语言内存分配问题1、C中内存分为四个区栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。 堆:用来存放由动态分配函数(如malloc)分配的空间。是由程序员自己手动分配的,并且必须由程序员使用free释放。如果忘记用free释放,会导致所分配的空间一直占着不放,导致内存泄露。 全局区:用来存放全局变量和静态变量。存在于程序的整个运行期间,转载 2012-07-12 20:13:41 · 781 阅读 · 0 评论 -
C可变参数
(一)写一个简单的可变参数的C函数下面我们来探讨如何写一个简单的可变参数的C函数.写可变参数的C函数要在程序中用到以下这些宏:void va_start( va_list arg_ptr, prev_param );type va_arg( va_list arg_ptr, type );void va_end( va_list arg_ptr );转载 2012-08-19 11:44:16 · 827 阅读 · 0 评论 -
C文本流、二进制流的区别
一、文本文件与二进制文件的定义 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。 简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。转载 2012-07-16 10:10:47 · 2703 阅读 · 0 评论 -
C 对于C语言可移植性的思考
我相信学过C语言的同学,都会在书中看到C语言特点一定有:可移植性。但是什么是可移植?如何才能可移植?C语言是如何做到可移植的?对于初学者,可移植可能是一个经常遇到却很神秘的词。我想通过这篇文章来表达我对于可移植性的一些想法。 首先,在这里铺垫一下。学过Win32程序设计的人肯定都听说过API(Application Program Interface)。我就先说说API,高手绕过。API转载 2012-08-19 14:30:38 · 2777 阅读 · 0 评论 -
C malloc中典型问题
注意:问题中的int占16位,计算中间结果时造成整数溢出,当然现在机器一般都32位机器(机器字长为32),这个问题一般可以忽略,只是记录在此,以示提醒。转载 2012-08-15 21:34:17 · 1155 阅读 · 0 评论 -
轻量级C语言实现的xml解析库minixml
1下载:http://www.msweet.org/downloads.php?L+Z32说明:Mini-XML是一个小型的开源的XML解析器,采用 C 语言开发。该解析器最大的特点就是小型、无须依赖其他类库,只需要 GCC 编译器 和 make 程序即可编译,支持 UTF-8/UTF-16 编码。Mini-XML支持读取UTF-8和UTF-16和UTF-8编码的XML文件和字原创 2014-12-01 23:02:49 · 16740 阅读 · 0 评论 -
纯C语言INI文件解析
在一个跨平台( Android 、Windows、Linux )项目中配置文件用 INI 格式,自己写了个解析库,纯C语言的,简单好用。 可以解析 INI 格式的字符串、解析文件、保存到文件。 下面是头文件:[cpp] view plaincopy#ifndef INI_PARSER_H #define IN转载 2014-10-17 17:49:21 · 1593 阅读 · 0 评论 -
libcurl源码编译及使用
1:源码编译libcurl 7.21以后的版本在Windows下的编译比较简单,自带了MinGW和VC环境的Makefile文件,首先去Curl官网下载源代码:http://curl.haxx.se/download.html,任选一个下载即可,推荐这个: curl-7.21.2.tar.gz,下载完成后解压开,打开命令行进入curl源码目录,(在此之前请先设置好MinGW的环境变量):原创 2014-02-26 16:25:20 · 32349 阅读 · 5 评论 -
socket编程模型
最先出现的是阻塞模型,这个模型是讲解计算机网络时被作为例子介绍的,也是最简单的。其基本原理是:首先建立一个socket连接,然后对其进行操作,比如,从该socket读数据。因为网络传输是要一定的时间的,即使网络通畅的情况下,接受数据的操作也要花费时间。对于一个简单的单线程程序,接收数据的过程是无法处理其他操作的。比如一个窗口程序,当你接收数据时,点击按钮或关闭窗口操作都不会有效。它的缺点显而易见,转载 2014-10-22 16:43:14 · 1041 阅读 · 0 评论 -
select函数详解及实例分析
Select函数在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、 accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻转载 2014-10-22 16:29:50 · 1587 阅读 · 0 评论 -
win32下使用pthread
pthread下载地址:ftp://sourceware.org/pub/pthreads-win32原创 2014-06-20 16:25:15 · 3047 阅读 · 0 评论 -
C循环队列
#include #include #include #include "CirQueue.h"#define debug_printf printf//#define debug_printf ///*循环队列 C语言实现 *2014-05-08 *huanglei@antiy.com *///初始化循环队列long func_long_init_Cir_Queue(原创 2014-05-12 15:56:40 · 1025 阅读 · 0 评论 -
深入分析Windows和Linux动态库应用异同
深入分析Windows和Linux动态库应用异同摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual转载 2014-03-25 13:24:37 · 1183 阅读 · 0 评论 -
JSON的C语言编解码器——cJSON和json-c
JSON是一种比XML更轻量级的数据交换格式,关于JSON的基础知识,参考 JSON http://www.json.org/json-zh.html看看你使用的语言中是否已有JSON支持,也参考JSON http://www.json.org/json-zh.htmlcJSON是C语言中的一个JSON编解码器,非常轻量级,C文件只有500多行,速度也非常理想。项目主页转载 2014-03-21 14:49:15 · 12053 阅读 · 0 评论 -
C可变参数函数 实现
C函数要在程序中用到以下这些宏:void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr ); va_list:用来保存宏va_start、va_arg和va_end所需信息的一种类型。为了访问变长参转载 2013-12-06 17:49:10 · 828 阅读 · 0 评论 -
调用dll
DLL(动态连接库),然而可以分为动态调用于静态调用。下面我分别举一个例子说说。1)动态调用:首先:在VC++6.0中创建 Win32 Dynamic-link library工程创建一个动态连接库工程: 在头文件TestDll.h中写下代码 extern "C" int __declspec(dllexport) add(int n转载 2013-09-05 12:25:38 · 901 阅读 · 0 评论 -
Win32API大全
1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结转载 2013-09-04 13:35:22 · 3588 阅读 · 0 评论 -
Computer.Systems.A.Programmers.Perspective笔记
#include int main(){ printf("hello, world\n");}unix> gcc -o hello hello.c,gcc编译器编译流程: Figure: The compilation systemHere, the原创 2013-07-10 13:57:25 · 1289 阅读 · 0 评论 -
排序算法
http://blog.csdn.net/morewindows/article/category/859207转载 2013-07-07 13:40:17 · 570 阅读 · 0 评论 -
C一个简单的通配符匹配实例
通配符是用来通配的,不同的系统上通配符不一样,例如:SQL中有“_”通配符(仅替代一个字符) 与“%”通配符(替代一个或多个字符),须与LINK运算符一起使用。此处仅考虑通配符*和?,*表示0或任意多个字符,?表示单个字符。int match(char *pat,char *str){switch(*pat){case ‘\0’ return !*str;原创 2012-08-18 16:29:23 · 4040 阅读 · 0 评论 -
C I/O流总览
补充:C中文本文件和二进制文件的读写差别:C的文本方读写与二进制读写的差别仅仅体现在回车换行符的处理上.文本方式写时,每遇到一个''/n''(0AH换行符),它将其换成''/r /n''(0D0AH,回车换行),然后再写入文件;当文本读取时,它每遇到一个''/r/n''将其反变化为''/n'',然后送到读缓冲区.正因为文 本方式有''/n''--''/r/n''之间的转换,其存在转换耗转载 2012-07-16 10:50:37 · 1165 阅读 · 0 评论 -
通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
开发语言:C/C++支持平台:Windows实现功能:通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号下载地址:WMI_DeviceQuery.zip版本历史:V1.4 2010年05月17日 修正了硬盘序列号处理中的错误。现在和EVEREST Ultimate Edition 5.转载 2012-07-19 20:42:39 · 8842 阅读 · 0 评论 -
C符号重载
转载 2012-07-19 21:49:46 · 950 阅读 · 0 评论 -
C为什么不对数组进行下标越界检测
转载 2012-07-10 11:07:06 · 1074 阅读 · 0 评论 -
C ADT(抽象数据类型)
转载 2012-07-18 15:11:29 · 760 阅读 · 0 评论 -
C中string.h
@函数名称: strdup 函数原型: char *strdup(const char *s) 函数功能: 字符串拷贝,目的空间由该函数分配 函数返回: 指向拷贝后的字符串指针 参数说明: src-待拷贝的源字符串 所属文件: #include #include #include int main() { char转载 2012-07-06 16:15:26 · 1182 阅读 · 0 评论 -
C volatile关键字
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改。 用volatile关键字声明的变量i每一次被访问时,执行部件都会从i相应的内存单元中取出i的值。 没有用volatile关键字声明的变量i在被访问的时候可能直接从cpu的寄存器中取值(因为之前i被访问过,也就是说之前就从内存中取出i的值保存到某个寄存器中),之所以直接从寄存器中取转载 2012-07-17 16:13:24 · 596 阅读 · 0 评论