2013年7月6日

errno是在errno.h中定义的一个整型变量,
当且仅当库函数执行失败时,errno被设置,
errno中保存错误代码( int型的值 ),具体错误信息可以调用perror()或strerror()输出。
errno 记录系统的最后一次
错误代码

注意:errno是在已经知道出错的情况下,表示出错类型的;最好不要拿它来作为判断是否出错的依据。


正确用法:
1.如果函数本身返回一个指示调用成功与否的值,则先用这个值判断是否失败,如果确定失败,在根据errno判断失败类型。 例:

 

res = func();
if( res == 某个失败值 )
{
   printf("errno = %d\n",errno );
}

 

2.调用函数前先手动设置errno = 0。例:


errno = 0;
func();
//这个时候errno就能说明问题了。
if( 0 == errno )
   printf( "succeed" );
else
   printf( "failed" );


错误用法
func();
if( 0 != errno )
   printf( "something wrong!" );

原因:
error只有在调用失败的时候才会被修改,调用成功的时候不会被修改;
当errno = 0 时,不能确定调用成功,也有可能是前面的代码把errno设置成了0;
当errno < 0 时,不能确定调用失败,也有可能是上次调用失败遗留下来的结果。

posted @ 2013-07-06 19:21 烽火依然 阅读(414) | 评论 (0)编辑 收藏

2013年7月3日

函数
是用于完成特定任务的程序代码的自包含单元。

函数分类:
真函数:返回一个值的函数。
过程类型的函数:无返回值。

函数定义:函数体的实现,函数体是一个代码块,它在函数被调用时执行。
函数声明:提高了编译器在函数调用时检查错误的能力。

函数参数:
c函数的所有参数均以"传值调用"方式进行传递,值意味着函数将获得函数值的一份拷贝。
当传递指针时也是拷贝指针值,只不过指针指向的位置是一样的。

ADT和黑盒:
ADT,abstact data type, 抽象数据类型,它可以限制函数和数据定义的作用域。这个技巧被称为黑盒(block box)设计。
抽象数据类型的想法是很简单的:模块具有功能说明和接口说明,前者说明模块所执行的任务,后者定义模块的使用。

递归与迭代:
递归:优点在于为某些编程问题提供了最简单的解决方法,缺点是一些递归算法会很快耗尽计算机内存资源,同时使用递归程序难于阅读和维护。
尾递归:最简单的递归形式,即把递归调用语句放在函数结尾(恰在return语句之前),尾递归可以很容易转换成一个简单循环(效率高很多)。

递归所需两个特性:
1.存在限制条件,当符合这个条件时递归便不再继续。
2.每次递归后越来越接近这个限制条件。

注意:
1.形参表为空时,填入void表明函数没有任何参数(避免编译器误认为函数是旧式函数声明或定义).
2.函数名与函数返回类型分两行书写,这种写法更容易查找函数名。
3.值的类型不是值的内在本质,而是取决于它被使用的方式。
4.一个值的类型无法简单的通过检查它的位模式来判断,机器无法识别,编译器告诉它怎么做它就怎么做。
5.传递数组名时,函数得到的只是一个指针(数组名拷贝),如果需要使用数组长度,需通过函数参数显示指定,在函数体内用sizeof计算得到的只是指针的长度(一般为4)。

posted @ 2013-07-03 12:38 烽火依然 阅读(394) | 评论 (0)编辑 收藏

2013年7月2日

google搜索技巧(大部分百度也可用)
1.filetype:
只搜索指定类型的文档,可以用来搜索pdf,doc,jpg等类型的文档。
2.intile:
只显示标题中包含指定关键词的搜索结果。
3.site:[网址]
只搜索某个网站的页面。
4." "
以整个短语作为搜索关键词,而不是拆开成每个词。
5. -
排除整个关键词。
6. ~
同时搜索近义词。
7.   ..
显示指定范围内的搜索结果。
8. *
星号用来代替任意字符。
9. author:
搜索特指作者。
10.define:
搜索特定字词定义。
11.数学计算
直接输入公式就可得到结果。
12.单位换算
例:54磅=?公斤。

google快捷键:
(说明:C=ctrl, M=alt)
C+N  打开新窗口
M+F4  关闭当前窗口
C+T/C+W 打开新标签页/关闭标签页
C+shift+T 重新打开上次关闭的标签页,最多可记得10个标签页
C+O  打开计算机上的文件

按住ctrl,然后点击链接   从后台在新标签页中打开链接,但仍停留在原标签页中
按ctrl+shift,然后点击链接    在新标签页中打开链接,同时切换到新标签页
按shift,然后点击链接  在新窗口中打开链接

C+Tab 或 C+pgDown  切换到下一个标签页
C+Shift+Tab 或 C+PgUp  切换到上一个标签页
C+9 切换到最后一个标签页
C+1到C+8切换到指定位置编号的标签页

M+Home 打开主页

C+L 或 F6 或 M+D 选中网址区域中的内容
键入网址,然后按alt+Enter 在新标签页中打开网址
键入网址中www. 和 .com 之间的部分,然后按C+Enter  自动在地址栏中补足地址然后打开网址

在地址栏中键入搜索引擎关键字或网址,再按Tab,然后输入搜索字词 :使用指定搜索引擎进行搜索

C+J  查看"下载"页
C+H  查看"历史记录"页
C+B  打开和关闭书签栏
C+Shift+B  打开书签管理器
Shift+Esc 查看任务管理器(浏览器), firefox不支持
Shift+M+T 将焦点设置在工具栏上。使用键盘上的左右箭头,可导航至工具栏上的不同按钮

C+P 打印当前页
C+S 保存当前页
F5   刷新
Esc 停止加载当前页

C+F 打开"在网页上查找"框
C+U 查看源代码
C+D 将当前页加入书签

C++ 放大网页上的所有内容
C+- 缩小网页上的所有内容
按Ctrl并上下滚动鼠标滚轮   放大/缩小网页上的所有内容
C+0 将网页上的所有内容都恢复到正常大小

C+C 复制
C+V 或Shift+Insert  从剪贴板黏贴当前内容
C+Shift+V 从剪贴板黏贴当前内容的纯文本部分
C+X 或Shift+Delete 删除内容并将其复制到剪贴板

posted @ 2013-07-02 23:21 烽火依然 阅读(239) | 评论 (0)编辑 收藏

2013年7月1日

     摘要: 可变函数可变参数列表通过宏来实现,定义于stdarg.h头文件,是标准库的一部分。这个头文件声明了一个类型va_list和三个宏--va_start、va_arg和va_end。声明一个类型为va_list的变量,与几个宏配合使用,访问参数的值。函数的使用方法必须按如下步骤进行:1.在函数原型中使用省略号。2.在函数定义中创建一个va_list类型的变量。3.用宏将该变量初始化为一个参数列表。4....  阅读全文

posted @ 2013-07-01 23:14 烽火依然 阅读(283) | 评论 (0)编辑 收藏

2013年6月25日

需要注意的一些知识点

字符串:一串零个或多个字符,并且以一个位模式为全0的NUL字节结尾。
字符串长度:所包含的字符个数(不包括NUL字节)。

无符号数在使用时需要特别注意:
如:
   if( strlen( x ) >= strlen( y ) )...
   if( strlen( x ) - strlen( y ) >= 0 )...
其中第一条语句可以按照预想的那样工作,但是第二条语句结果永远是真。
(说明:strlen返回size_t类型)

基础函数

char *strlen( char const *string );
char *strcpy( char *dst, char const *src );
char *strcat( char *dst, char const *src );
int strcmp( char const *s1, char const *s2 );
注意:strcpy,strcat不保证返回的是一个合法的字符串,程序员必须自己保证dst能够容纳字符串。

长度受限字符串函数
char *strncpy(char *dst, char const *src, size_t len );
(src < dst ,将会以NUL填充到len长度,若src>dst,结果不会以NUL字节结尾)
char *strncat( char *dst, char const *src, size_t len);
(最多向dst中复制len个字符,并以NUL字节结尾,但不管复制后长度是否溢出,需程序员字节保证)
int strncmp( char const *s1, char const *s2, size_t len );

内存操作
void *memcpy( void *dst, void const *src, size_t length );
void *memmove( void *dst, void const *src, size_t length );(允许字符串重叠,其余函数对重叠均无定义)
void *memcmp( void const *a, void const *b, size_t length );
void *memchr( void const *a, int ch, size_t length );
void *memset( void *a, int ch, size_t length );

字符操作:使用字符操作函数能提高程序的可移植性。
字符分类函数
iscntrl 任何控制字符
isspace 空白字符:空格' ', 换页'\f', 换行'\n', 回车'\r', 制表符'\t', 垂直制表符'\v'
isdigit 十进制数字0~9
isxdigit 十六进制数字,0~9 a~f A~F
islower 小写字母a~z
isupper 大写字母A~Z
isalpha a~z A~Z
isalnum 字母或数字 a~z A~Z 0~9
ispunct 标点符号,任何不属于数字或字母的图形字符(可打印符号)
isgraph 任何图形字符
isprint 任何可打印字符,包括图形字符和空白字符

字符转换
int tolower( int ch );
int toupper( int ch );
注意:如果函数的参数并不是处于适当大小写状态的字符(即toupper的参数不是小写字母或tolower的参数不是大写字母),函数将不修改参数直接返回。

高级函数

1.查找一个字符
/*
**返回指向第一个在str中出现的ch的位置的指针。
*/
char  *strchr( char const *str, int ch );
例:  
1 char string[20= "Hello there, honey.";
2 char *ans;
3 ans = strchr( string'h' );
结果:ans = string+7;

/*
**返回指向最后一个在str中出现的ch的位置的指针。
*/
char  *strrchr( char const *str, int ch );

2.查找任何几个字符
/*
**返回指向str中第一个匹配group中任何字符的字符位置。
*/
char  *strpbrk( char const *str, char const *group );
例:
1 char string[20= "Hello there, honey.";
2 char *ans;
3 ans = strpbrk( string"aeiou" );
结果:ans=string+1;

3.查找一个子串
/*
**返回s2在s1中第一次出现的起始位置的指针。
**如果s2在s1中没有出现,返回NULL。
**如果s2为空字符串,返回s1。
*/
char  *strstr( char const *s1, char const *s2 );

注意:不存在strstr或strrpbrk函数。
但是可以很容易实现,如:
查找子串最右一次出现的位置

4.查找一个字符串前缀
/*
**返回str起始部分匹配group中任意字符的字符数。
*/
size_t  strspn( char const *str, char const *group );
例:
1 int len1,len2;
2 char buffer[] = "25,142,330,Smith,j,239-4132";
3 
4 len1 = strspn( buffer, "0123456789");
5 len2 = strspn( buffer, ",0123456789");
结果:len1 = 2;
        len2 = 11;
例2:
//计算一个指向字符串中第一个非空白字符的指针。
ptr = buffer + strspn( buffer, "\n\r\f\t\v" );

/*
**返回str起始部分不与group中任意字符匹配的字符数。
*/
size_t  strcspn( char const *str, char cosnt *group );

5.查找标记
/*
**实现从字符串str中隔离(提取)各个单独的称为token的部分,并丢弃分隔符(在sep中出现的字符)。
*/
char *strtok( char *str, char const *sep );
例:
print_tokens.c

posted @ 2013-06-25 19:49 烽火依然 阅读(219) | 评论 (0)编辑 收藏

2013年6月24日

   


后缀 使用  解压缩 对象  压缩后文件大小 说明
gzip  .gz gzip+文件名  gunzip+ 文件名 文件  与.bz2格式差不多

1.可先用tar命令打包文件,再进行压缩;

2.文件压缩后不保留源文件

zip .zip

1.zip+文件

2.zip -r +目录

unzip+dst+src(目录或文件) 文件/目录  最大

会保留原文件

是win和linux的通用格式

bzip2 .bz2

1.bzip2 -k +文件

2.bzip2 +文件

bunzip2+文件 文件  最小

加选项 -k 则会保留原文件

否则,与gzip命令无差别



 

posted @ 2013-06-24 16:31 烽火依然 阅读(238) | 评论 (0)编辑 收藏

2013年3月30日

  1. 安装ibus框架,终端输入以下命令:sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4
  2. 启用ibus框架:im-switch -s ibus
  3. 重启电脑或注销当前用户
  4. 设置ibus框架:ibus-setup(此时会出现对话框)
  5. 选择input标签页,打钩复选框(customize active input methods),在(select an input method)当中选择想要的输入法,默认为"pinyin"和"Bopomofo"两种。(当然也可以在dash home中输入ibus 会出现两个选项:ibus和keyboard input methods;选择后者进行操作)

posted @ 2013-03-30 18:07 烽火依然 阅读(226) | 评论 (0)编辑 收藏

仅列出标题