技术宅,fat-man

增加语言的了解程度可以避免写出愚蠢的代码

导航

2012年3月14日 #

C语言:io重定向

摘要: 什么是IO重定向?C语言里调用fprintf的时候可以向指定的fp(FILE *fp)写入数据,但是调用printf函数时确不需要指定任何FILE*,为什么?启动一个C程序时,调用环境自动建立3个FILE*(stdin,stdout,stderr),并关联相应的设备,而我们的scanf使用的就是stdin,printf使用的是stdout,但是这种关联在程序启动的时候是可以改变的,这就是IO重定向每个标准输入输出描述符都有自己的缓存,向他们的缓存块里写入数据,程序就可以调用相应的函数读取,例如getchar()可以从stdin的缓存块里读取一个字符#include <stdio.h> 阅读全文

posted @ 2012-03-14 23:08 codestyle 阅读(858) 评论(0) 推荐(0)

C语言:fopen模式比较

摘要: fopen 模式属 性rwar+w+a+文件必须已存在YNNYNN文件内容将丢失NYNNYN允许从流读取(fread)YNNYYY允许写入到流(fwrite)NYYYYY从流的末尾写入NNYNNY任意定位(fseek)YYYYYN当操作的文件的文件是二进制文件的时候,流的模式可以指定符中添加字母b进行表示,b可以出现在+号的之前或之后 例如:rb,wb,a+b,ab+参考:《C语言参考手册》 p284,p285r+ ,w+,a+ 几种模式解析虽然r+,w+两种模式都是可以进行进行读写操作,但是w+打开文件的时候会清除掉文件内容,因此当需要对文件内容进行随机访问和读写的时候,坚决的不能使用这种模 阅读全文

posted @ 2012-03-14 22:59 codestyle 阅读(1291) 评论(0) 推荐(1)

C语言:传递可变参数

摘要: void g(...);void f(...){g(...);}f("%s %d","hello",2011);//需求:函数g,f都支持可变参数,外部调用函数f,函数f把自己的参数传递给g #define FUNC(format,...) g(format,__VA_ARGS__)//方案1:将f实现为一个宏(但是这种方法不够灵活)void g(char ** format,va_list *args){ va_start(*args, *format); }void f(char *format, ...){ va_list args; g(& 阅读全文

posted @ 2012-03-14 22:53 codestyle 阅读(1569) 评论(0) 推荐(0)

C语言:什么是可变参数?

摘要: printf其实就是使用了可变参数的函数,printf的原型定义为int printf(char *format,...);我们在使用printf的时候可以这样ptintf("hello");ptintf("%s ,today is % year","hello",2011);可变参数由调用函数动态的传递参数进被调函数(被调函数使用...声明自己支持可变参数),被调函数通过格式字符串来识别调用函数传递进来的参数个数和类型可变参数解析我们知道C程序函数调用的时候是遵循__stdcall,也就是调用者负责参数的压栈和清理,参数在栈上是按进 阅读全文

posted @ 2012-03-14 22:48 codestyle 阅读(444) 评论(0) 推荐(0)

FILE* 与 文件描述符之间的转换

摘要: UNIX系统有一个设计哲学:一切皆文件,最初对这句话没啥体会,不知道他说的是啥,直到看到fdopen(),fileno()才发现原来在UNIX下任何文件描述符都可以和FILE类型做互相的转换,这个例子是本来是一个socket文件描述符,也可以调用fdopen()转换成为以个FILE流,然后通过fread,fwrite进行网络通信,原来UNIX用文件流这个概念屏蔽了不同设备(网卡/硬盘/CD)的差异,抽象读一个可写可读的流.windows部分支持这个特征,但前提是转换的HANDLE(Windows的文件描述符)是文件指针,这样可以通过fdopen转换成为FILE*否则fdopen里用于检查HAN 阅读全文

posted @ 2012-03-14 22:39 codestyle 阅读(1141) 评论(0) 推荐(0)

C语言:格式字符串中的类型

摘要: 基本格式字符含义详解模式字符数据类型进制计数法备注%cchar--%schar*--%d,%iint10-%uunsigned int10-%ounsigned int8-%x,%Xunsigned int16-x,X的区别是数据中A-F的大小写的区别%fdouble10浮点12.34%e,%Edouble10指数1.234000e+001%g,%Gdouble10指数 OR 浮点取其中较短的一种计数法%a,%Adouble16指数Linux/gcc有定义%pvoid*--(C99) 等价于%08X,%#8x扩展格式字符含义模式字符可匹配模式说明数据类型%l?d,I,u,o,x,X 长整形lo 阅读全文

posted @ 2012-03-14 22:31 codestyle 阅读(981) 评论(0) 推荐(0)

C语言:scanf的格式字符串

摘要: scanf的格式字符串远比printf简单:%[*][数据宽度]类型指定读取字节数(即数据宽度)char buffer[10];scanf("%9s",buffer);printf("%s\n",buffer);//最多读取9个字符(最后一个字节留着存储'\0')防止数组越界读取并扔掉若干字节scanf("%*6c");scanf("%c",&c);printf("%c\n",c);//输入"hello,world",跳过前6个字符,读取并打印w可以指 阅读全文

posted @ 2012-03-14 22:26 codestyle 阅读(775) 评论(0) 推荐(0)

C语言:printf的格式字符串

摘要: printf的格式字符串 : %[标记] [ [ * ] [数据宽度] ] [.精确度]类型+-0#最小宽度精确度类型显示符号左对齐(默认右对齐)数据前填0(右对齐时)8进制加016进制加0x10进制整数或者*号例如.2-Y--Y-c-Y--Y-sYYY-Y-d,i-YY-Y-u-YYYY-o-YYYY-xYYY-YYf,e,g,a-表示该类型不需要这个选项从上表看出只有数据宽度和对齐才是所有类型都支持的格式,指定宽度时默认右对齐只有在指定最小宽度时,我们才能使用-,0标志,这个时候的对齐和填充才有意义,实际上只要指定最小宽度,且数据不足这个宽度就一定会发生填充,以空白字符或者填充在数据前部或 阅读全文

posted @ 2012-03-14 22:25 codestyle 阅读(1127) 评论(0) 推荐(0)

2012年3月13日 #

python 文本比较

摘要: #!/usr/bin/env python# -*- coding: utf-8 -*-import difflibfrom difflib import *def compare(stream1,stream2): lines1 = stream1.splitlines() lines2 = stream2.splitlines() result=list(Differ().compare(lines1,lines2)) print str(result)if __name__ == '__main__': s1="hello\nword\nwww\n" 阅读全文

posted @ 2012-03-13 14:40 codestyle 阅读(618) 评论(0) 推荐(0)

2012年3月12日 #

重构?

摘要: 第一版代码import webdef newFolder(db,folderName,userId,pFolderId=0,isLeaf=1,projectId=0): try: web.debug("person") if _isRootFolderOfPerson(pFolderId,projectId): return _createRootFolderOfPerson(db,folderName,userId,pFolderId,isLeaf,projectId) web.debug(... 阅读全文

posted @ 2012-03-12 23:34 codestyle 阅读(215) 评论(0) 推荐(0)