C语言
xiaodaokuailai
博客已搬家 欢迎访问,相互学习
展开
-
【C语言】二分查找递归算法
对有序的数组使用二分查找,可提高效率二分查找,下标由0开始,递归结束条件,data[p] == key || start >= endint BinaryS(int *data,int start,int end,int key){ int result; int p = (start + end) / 2; if (data[p] == key ||原创 2013-05-12 11:15:58 · 5455 阅读 · 0 评论 -
【C语言】linux网络编程—hostent结构体,gethostbyname的使用
使用gethostbyname函数获取 hostent 域名结构体最简单的情况,这里面不包括出错处理,异常等的处理:#include #include #include #include int main(int argc, char **argv){struct hostent *host; printf("%d\n",argc);char *name = *(a原创 2013-04-10 15:14:59 · 5072 阅读 · 0 评论 -
【C语言】语法 --转义字符
来自 百度知道C语言转义字符:\a 响铃(BEL) 007 //你的声卡会发出“嘀”的一声\b 退格(BS) 008 //表示后退一格(删除)\f 换页(FF) 012 //这不好说,表示换一页,后边会有一个♀这样的标志\n 换行(LF) 010 //换下一行\r 回车(CR原创 2013-04-03 10:45:44 · 1114 阅读 · 0 评论 -
【C语言】getchar函数的控制台输入原理,回车符的处理
getchar函数的功能是从输入流读取一个字符,这是我们要明确的就是:我们在控制台需要输入至少两个字符才能保证这个函数的执行:例如:源程序:char ch;ch = getchar();我们需要在标准输入流里面输入 ”w 回车“,就是需要至少输入两个字符,一个是接受的正常字符,另一个就是回车换行符,这个回车符的作用就有些像触发器,只要输入了回车符源程序就会进行一次执行,原创 2013-04-03 14:30:50 · 11323 阅读 · 2 评论 -
【C语言】 fgetpos和fsetpos的参数问题
fgetpos和fsetpos的参数分别为:int fgetpos(FILE *stream, fpos_t *pos);int fsetpos(FILE *stream, const fpos_t *pos);其中的参数是pos是指向 fpos_t * 类型的一个指针。但是当我这样使用的时候fpos_t * pos;fgetpos(fp,pos);会提示错误,gc原创 2013-04-02 16:40:12 · 4153 阅读 · 0 评论 -
【C语言】文件指针与文件位置指针,位置指针相关操作库函数
1 文件指针文件指针是指向一个文件的指针,确切的将是指向用文件这个结构体所定义的对象的起始地址,文件指针的移动是指在文件之间来移动,比如:FILE * fp;fp = fopen("/programe/test.txt","a+");fp就表示文件指针。问题:文件指针能不能在文件之间来回移动?如果能的话,需要先释放文件指针吗?如果不能的话,是为什么,是因为这个指原创 2013-04-02 15:46:28 · 28006 阅读 · 2 评论 -
【C语言】C语言返回文件大小的功能(fseek和ftell的使用)
需求:有时候读文件时,需要知道文件的字符总的个数,可能是为了提前定义缓冲区大小或者拷贝文件等等。也可以用于动态创建数组。在进行这两个问题之前,先来了解一下两个函数,这两个函数配合就能够实现计算大小的功能。函数 一:fseekstdio中的库函数:函数原型:int fseek(FILE *stream, long intoffset, int whence);功能:设定文件指原创 2013-04-02 13:06:11 · 17941 阅读 · 1 评论 -
【C语言】《C和指针》打印文件中的最长的一行字符串
来源 《Pointers on C》: Write a programe that reads input lines one by one until end of file is reached,determines the length of each input line,and then prints out only the longest line that was f原创 2013-03-31 22:30:54 · 2655 阅读 · 0 评论 -
【C语言】C语言实现文件内容的复制
需求: fgetc fputc练习/program文件下面存在一个文件 文件名为:addoverflowDemo.c 现在需要在该目录下复制一个相同的文件,文件名为test:代码如下:#include #include int main(){FILE * sourcefile;FILE * desfile;char c;sourcefile = fopen("原创 2013-03-31 20:09:30 · 11956 阅读 · 0 评论 -
【C语言】C语言文件详解
1 C语言file类,在stdio.h 头文件中,FILE类是一个结构体:定义如下:struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int原创 2013-03-31 15:29:02 · 5340 阅读 · 1 评论 -
【C语言】溢出的处理及大小端模式的判断
我们都知道,字符char类型,占用的空间为8位,int类型占用空间为16位,当int赋值给char的时候会发生什么效果呢?处理规则是什么样的呢?方法一:编写如下代码测试:#include #include int main(){char sum;int operator1 = 4874;//4874 = 0000 0000,0000 0000,0001 0011,原创 2013-03-30 14:57:05 · 3576 阅读 · 0 评论 -
【C语言】linux下c语言 客户端服务器编程框架
客户端服务器编程模型:客户端代码:#include #include #include #include #include #include #include #include #include #include #define MAXLINE 100;#define RIO_BUFSIZE 8192;int main(){int clientfd原创 2013-04-11 12:42:12 · 5185 阅读 · 0 评论 -
【C语言】makefile的使用
三个文件1 add函数头文件-计算两个数的和 m.h2 add函数的实现文件 m.c3 main函数调用文件 main.c源代码:m.h:#include int add(int a, int b);m.c:#include "m.h"int add(int a, int b){return a + b;}main.c原创 2013-04-11 19:33:59 · 1357 阅读 · 0 评论 -
【C语言】数组名&地址&地址中的值的访问
数组名&地址&地址中的值的访问1 一维数组一维数组名输出的是地址,相应的“*数组名”,输出的是这个地址指向的数字。比如:int matrix[5];数组名matrix表示的是这个数组的首地址,而*matrix表示的是这个首地址指向的值。2二维数组二维数组数组名表示的是第一行的地址,相应的“*数组名”表示的是第一列的地址,而**数组名表示的是第一行第一列指向的值。二维数组原创 2013-05-04 10:49:44 · 2625 阅读 · 0 评论 -
【C语言】scanf,fgets,fputs缓冲区问题
1 为什么输入回车后,程序就开始运行了?scanf仅在每一个数据域均有数据,并按回车后结束,程序继续运行。因为scanf函数规定:在scanf函数接收数据时,遇到以下情况之一则结束一个数据的输入, (1) 遇到空格、回车、跳格键(2)遇到宽度结束 (3)遇到非法输入2 在用%d控制字符输入数据时,系统会忽略掉空白字符, 在用%c控制字符输入数据时,系统不会忽略,而原创 2013-05-04 16:59:48 · 5417 阅读 · 0 评论 -
函数指针与函数指针数组的定义与使用
函数指针与函数指针数组的定义与使用函数指针:指向函数的指针定义方法为double add(double a,double b);double sub(double a,double b);double mul(double a,double b);double div1(double a,double b);double (*Func)(double,d原创 2013-05-12 11:09:29 · 14397 阅读 · 2 评论 -
【C语言】枚举&宏&const
带参数的宏 #define MINV(A,B) AiPhone 栈512k,堆 30m条件编译 一般用于调试#ifdef#else#endif枚举通常枚举配合switch case来使用,IOS普遍使用枚举。#define sum(A,B) (A*B);typedef enum week { Monday, // 0 Tue原创 2013-05-12 10:50:55 · 1415 阅读 · 0 评论 -
【C语言】朴素字符串匹配算法及其实现
BF算法为什么需要回溯?比如如下字符串:S:aaaacefdffgT: aaac如果不进行回溯的话,当比较到第四个字符,a,c的时候,判断a != c,这时就需要移动T,将T的首字母移动到S中第四个a那里,继续从先前匹配失败的位置开始比较。这时 很明显就错误了,因为它跳过了正确的字符串。而如果要进行回溯的话,就是用S中的第二个字符开始和T中的第一个字符进行比较。每次移动原创 2013-05-05 18:57:30 · 3737 阅读 · 0 评论 -
【C语言】结构体存储与空间分配
1 结构体存储对齐结构体占用的空间为结构体成员中,占字节最大的数据成员的空间的整数倍比如:struct student{char sex;int score;};最大长度为整型占用4个字节的空间,所以其占用的空间为4的倍数,这样 s占用的空间就是 8个字节。如果是这样一个结构体struct student{char sex;double scor原创 2013-05-04 09:50:48 · 7584 阅读 · 0 评论 -
【C语言】耶稣门徒问题求解——谁是叛徒
耶稣13个门徒,围成一圈,从1开始报数,报数编号1-3,当谁报到3,谁就退出,叛徒就在继续报数的人里面,找出最后一个退出的人,他就是叛徒。求解:思路:13个人按顺序报数,报道3的人进行标记,下次继续进行13次循环,报数之前判断标记为,如果标记为为真就继续执行,否则就跳过,下一个人接着报数。定义一个13个大小的数组,用来标记,看那一个是最后标记的。代码实现:v原创 2013-04-29 20:18:54 · 3879 阅读 · 0 评论 -
【C语言】linux下静态库和动态库的编译
来自博客园 linux下静态库和动态库的编译每个程序实质上都会链接到一个或者多个的库。比如使用C函数的程序会链接到C运行时库,GUI程序会链接到窗口库等等。无论哪种情况,你都会要决定是链接到静态库(static libary)还是动态库(dynamic libary)。链接到静态库会使你的程序臃肿,并且难以升级,但是可能会比较容易部署。而链接到动态库会使你的程序轻便,并且易于升转载 2013-04-26 20:54:48 · 808 阅读 · 0 评论 -
【C语言】linux下简单的聊天室程序(TCP+多线程)
利用多线程实现linux下C语言的聊天室程序:客户端代码:threadsend线程负责客户端消息的发送;threadrecv线程负责客户端接受服务器端的消息。#include #include #include #include #include #include #include #include #include #include #include原创 2013-04-17 10:19:25 · 23821 阅读 · 11 评论 -
【算法】插入排序
插入排序类似于玩扑克牌时候的排序方式:首先将待排序序列分为有序集和无序集,明显初始状态下,有序集为待排序序列的第一个元素,其余的为无序集。算法代码为:#include #include void insertationSort();//插入排序 int main(int argc, const char * argv[]){ insertationSor原创 2013-04-24 20:29:36 · 947 阅读 · 0 评论 -
【C语言】开发工具--Linux下调试工具GDB的使用
来自 csdn博客 用GDB调试程序用GDB调试程序GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你转载 2013-03-29 20:58:26 · 817 阅读 · 0 评论 -
【C语言】指向指针的指针 char * *使用技巧
需求:因为需要定义一个字符串数组,用来存放多个字符串,于是想到使用 char **这种结构——指向指针的指针,于是编写代码如下:#include #include int main(){char * * ch;char * p = "abcdsdfsdfsfsfsdfs";char * q = "def";ch=(char **)malloc(2*sizeof(char *原创 2013-03-30 20:52:18 · 18045 阅读 · 3 评论 -
【C语言】数组--待续
int main() { char A[10]; char B[10]; int i = 0; string a; cin>>a; while(a[i] != '/0') { A[i] = a[i];原创 2010-09-22 11:11:00 · 412 阅读 · 0 评论 -
【C语言】代码分析--条件编译及编译预处理阶段
来自博客园 Rusty's code <!--p {margin-bottom:0.21cm}-->一、C语言由源代码生成的各阶段如下:<!--p {margin-bottom:0.21cm}-->C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件 其中 编译预处理阶段,读取c源程序,转载 2011-08-10 11:25:03 · 1352 阅读 · 0 评论 -
【C语言】指针--可省略函数名的函数
void (*b[10]) (void (*)());这是一个返回void类型的函数,此函数名称为(*b[10])参数为 void类型 参数值为一个函数的返回值 "(*)()",这个函数的返回值。其中 *b[10]表示一个指针数组。原创 2013-03-12 17:22:17 · 1540 阅读 · 0 评论 -
【C语言】语法--extern
extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字.它告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。1。对于extern变量来说,仅仅是一个变量的声明,其并不是在定义分配内存空间。如果该变量定义多次,会有连接错误2。通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。也就是说c文件里面定义,如果该函数或者变量与转载 2011-09-29 20:53:14 · 2753 阅读 · 0 评论 -
【C语言】起源
c编程语言:起源:1969-1973年间,作为一种用于UNIX系统的程序语言开发出来的1989年 ANSI颁布了ANSI C的标准c语言特点: Ritchie:“c是古怪的,有缺陷的,但同时也是一个巨大的成功”优点:1、非常适合系统及的编程,也适合大部分应用及程序的编写2、简单易于学习缺陷:1 、c的指针是造成困惑和程序错误的一个重要原因2、缺乏对于一些原创 2011-08-10 09:28:15 · 591 阅读 · 0 评论 -
【C语言】异常--异常处理机制
来自:http://apps.hi.baidu.com/share/detail/32641189C语言异常处理机制——为您的C程序添加异常处理 1、什么是异常 异常一般指的是程序运行期(Run-Time)发生的非正常情况。 异常一般是不可预测的,如:内存不足、打开文件失败、范围溢出等。 UNIX 使用信号给出异常,并当发生转载 2011-08-10 14:48:33 · 621 阅读 · 0 评论 -
【C语言】语法--++i与i++的区别
++i是先进性相加运算然后赋值;而i++是先进性赋值在进行相加运算原创 2011-08-10 18:30:08 · 574 阅读 · 0 评论 -
【C语言】IO--文件操作要点
1、在读取文件数据时,如果是字符数据,通常在定义用来保存该文件的数组时,,在字符数据个数的基础上,多分配一个字节,以存放表示字符串结尾的字符2、在读取文件内容的时候应该正确设置文件指针的位置原创 2011-08-25 15:31:30 · 554 阅读 · 0 评论 -
【C语言】语法--main函数的参数
本文章来自博客园 "Tech jati"前面介绍的main函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量转载 2011-10-07 10:29:25 · 637 阅读 · 0 评论 -
【C语言】语法--枚举
1 枚举解决了什么样的问题 枚举是提供了一个集合,以后如果需要取值的时候只能在这里面进行选取。比如我们选择星期几的这个参数 weekday = Monday等等,这就限定了变量的取值范围,使程序较少出错2 定义方法(两种),类似于结构体的定义方法。 (1) enum weekday{星期一,星期二,星期三,星期四,星期五,星期六,星期日 } day; (2) en原创 2013-03-12 18:51:46 · 1521 阅读 · 0 评论 -
【C语言】开发工具--GCC使用入门
来自: 51CTO GCC使用入门通常所说的GCC是GUN Compiler Collection的简称,除了编译程序之外,它还含其他相关工具,所以它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编译程序,它是Linux平台编译器的事实标准。同时,在Linux平台下的嵌入式开发领域,GCC也是用得最普遍的一种编译器。GCC之所以被转载 2013-03-14 13:39:08 · 1143 阅读 · 1 评论 -
【C语言】数组--字符串初始化数组的方法分析
字符串初始化数组的方法分析:char ch[8];ch = "hello";错误原因:错误提示:不兼容的类型,error: incompatible types in assignmentchar ch[8];这样定义了一个数组后,数组名ch就是个地址常量,也就是指针常量,只能指向该数组在内存地址空间中的首地址。不可以指向别的地址。所以如果ch = "hello";就是把字原创 2009-12-03 16:02:00 · 787 阅读 · 0 评论 -
【C语言】-->语法 fgets函数原理初探
问题来源于《 c与指针》 1.7章节中的一个问题:问题:下面的代码可能出现什么问题? while ( gets (input) != NULL){}首先我粗略的分析了一下,这行语句不就是输入一个字符串吗。 “!= NULL” 表示如果输入成功了,就继续运行。没想出来什么问题,于是决定在机器上面编译一下。于是写了代码如下:#include #原创 2013-03-29 20:46:41 · 11603 阅读 · 4 评论 -
【C语言】getchar函数 读入并输出任意长度字符串
主题来自 《C与指针》1.8.2: 编写一个程序,由控制台输入一个任意长度的字符串,标准输出读出该字符串。思路:定义一个字符串,使用字符串输入函数,输入字符串,再使用字符串输出函数输出该字符串。但这时,使用字符串函数,就需要开辟一段空间,比如使用 fgets函数。需要固定长度就无法输入任意长度的字符串。该换一种思路:想到之前编写过一个程序(参考 【C语言】-->语法原创 2013-03-29 22:09:48 · 15306 阅读 · 0 评论 -
【C语言】语法-typedef用法及与define的区别
本文参考网络文章并做了部分完善关于typedef的用法总结 不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,原创 2013-03-12 17:23:42 · 736 阅读 · 0 评论