![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
xx77009833
这个作者很懒,什么都没留下…
展开
-
static 关键字用途
<br /><br />copy from http://www.cnitblog.com/ictfly/archive/2006/11/25/19594.html<br />本文只是本人对C++中关于静态类型的一个总结,如错误之处,请大家帮我改正。我分两个方面来总结,第一方面主要是相对于面向过程而言,即在这方面不涉及 到类,第二方面相对于面向对象而言,主要说明static在类中的作用。 <br /><br />一、在面向过程设计中的static关键字 <br /><br />1、 静态全局变量 <br /原创 2010-07-06 14:34:00 · 311 阅读 · 0 评论 -
substr函数
<br /> string substr( size_type index, size_type num = npos );<br /> <br />本函数将字符串 string 的第 start 位起的字符串取出 length 个字符。若 start 为负数,则从字符串尾端算起。若可省略的参数 length 存在,但为负数,则表示取到倒数第 length 个字符。<br /> <br />echo substr("abcdef", 1, 3); // 返回 "bcd"<br />echo substr(原创 2010-08-03 16:29:00 · 365 阅读 · 0 评论 -
string::rfind
<br />The position of the last occurrence in the string of the searched content.<br />If the content is not found, the member value npos is returned.<br /> <br /> <br />Example1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br原创 2010-08-05 14:16:00 · 992 阅读 · 0 评论 -
ASCII,Unicode和UTF-8
<br />1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。ASCII码一共规定了128个字符的编码,比如转载 2010-08-15 14:09:00 · 316 阅读 · 0 评论 -
如何在C语言中巧用正则表达式
<br /><br />如果用户熟悉Linux下的sed、awk、grep或vi,那么对正则表达式这一概念肯定不会陌生。由于它可以极大地简化处理字符串时的复杂度,因此现在已经在许多Linux实用工具中得到了应用。千万不要以为正则表达式只是Perl、Python、Bash等脚本语言的专利,作为C语言程序员,用户同样可以在自己的程序中运用正则表达式。 <br /> 标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl转载 2010-08-24 20:38:00 · 280 阅读 · 0 评论 -
vector与list与deque比较
<br /><br />vector 表示一段连续的内存区域每个元素被顺序存储在这段内存中对vector 的随机 <br /> 访问比如先访问元素5 然后访问15 然后再访问7 等等效率很高因为每次访问离vector <br /> 起始处的位移都是固定的但是在任意位置而不是在vector 末尾插人元素则效率很低 <br /> 因为它需要把待插入元素右边的每个元素都拷贝一遍类似地删除任意一个而不是vector <br /> 的最后一个元素效率同样很低因为待删除元转载 2010-08-24 20:15:00 · 433 阅读 · 0 评论 -
关于 implicit declaration
<br />test.c:22: error: conflicting types for 'urlencode'<br />test.c:18: error: previous implicit declaration of 'urlencode' was here<br /> <br />这个警告或者是报错<br /> implicit declaration 应该是隐式声明的意思<br /> <br /><br />原来是因为没有先做函数声明,而函数位于main()之后。<br />在main函数原创 2010-08-25 16:32:00 · 683 阅读 · 0 评论 -
printf,snprintf的用法(可以作为linux中itoa函数的补充)
<br /><br />sprintf() 格式化输出函数(图形)<br />功能: 函数sprintf()用来作格式化的输出。<br />用法: 此函数调用方式为int sprintf(char *string,char *format,arg_list);<br />说明: 函数sprintf()的用法和printf()函数一样,只是sprintf()函数给出第一个参数string(一般为字符数组),然后再调用 outtextxy()函数将串里的字符显示在屏幕上。arg_list为参数表,可有不定个数。转载 2010-09-03 13:31:00 · 657 阅读 · 0 评论 -
printf
<br />主要是看*的用法 printf("%.*s/n", (uint32_t)key_length, key);int printf ( const char * format, ... );<br />Print formatted data to stdoutWrites to the standard output (stdout) a sequence of data formatted as the format argument specifies. After the format转载 2010-09-03 09:41:00 · 272 阅读 · 0 评论 -
strtol()详解
<br /><br />+----------------+<br />| strtol |<br />+----------------+<br />i.e. string to long<br />long int strtol(const char *nptr, char **endptr, int base)<br />strtol()会将nptr指向的字符串,根据参数base,按权转化为long int, 然后返回这个值。<br />参数base的范围转载 2010-09-30 14:09:00 · 146 阅读 · 0 评论 -
关于结构体中含有指针时候的内存分配
<br />如果你的struct有指针成员,那么你给这个struct分配内存后还是还得给其指针成员分配内存的,之前的分配只是给指针这个值分配内存,不是给它所指向的空间分配内存,指针都必须单独分配内存。<br />其他的就不用再次分配内存了。原创 2010-12-03 14:30:00 · 651 阅读 · 0 评论 -
C++ 的 delete 和 delete [] 简明解释
<br /><br />不少程序员菜鸟(其实包括不少老鸟)对于 delete 和 delete[] 的区别不甚了了,其实也没关系,记得 new 的就用delete 删, new [] 就用 delete [] 删就对了。<br />那么两者的区别到底在哪里呢?<br />说白了很简单,数组就是一块连续内存块, delete 这个命令就是删除一个连续内存块,所以无论 delete 的参数是什么,不管他是什么指针,这个内存块会被删除是毋庸置疑的。而 delete[] 相比 delete 会多做一件事转载 2010-10-21 17:27:00 · 318 阅读 · 0 评论 -
GetMemory错误讲解(指针练习)
<br /><br />错误程序:<br />void GetMemory( char *p )<br />{<br /> p = (char *) malloc( 100 );<br />}<br />void Test( void ) <br />{<br /> char *str = NULL;<br /> GetMemory( str ); <br /> strcpy( str, "hello world" );<br /> printf( “%s”,str );<br />}<br /> 这个一个转载 2010-10-29 11:17:00 · 283 阅读 · 0 评论 -
关于C++的扯淡
<br /> <br /> 今天下午在看C++Primer的时候跟同学东扯西扯一些乱七八糟的东西就填在这里。这本书还真的是不错的。 <br /> <br /> C++ 的诞生大约是在1980-1983年。总之我的一直以来的基本观点是,C++当初的诞生一定不是为了现在面向对象方法论上教授的那些扯淡的东西……什么把一个类的数据封装起来,只提供Get()和Set()接口来提高它的安全性啦,什么画一个业务流程图再转化为类图啦,之类的。C++的诞生离计算机的企业级大规模应用和面向对象设计方法论的诞生还有一段时间,转载 2011-01-21 14:41:00 · 548 阅读 · 0 评论 -
sequence point顺序点,side effect副作用
In C99 --- 6.5 ExpressionsBetween the previous and next sequence point an object shall have its stored valuemodified at most once by the evaluation of an expression. Furthermore, the prior va原创 2013-10-07 22:46:39 · 480 阅读 · 0 评论 -
函数指针数组的妙用
<br /><br />笔者在开发某软件过程中遇到这样一个问题,前级模块传给我二进制数据,输入参数为 char* buffer和 int length,buffer是数据的首地址,length表示这批数据的长度。数据的特点是:长度不定,类型不定,由第一个字节(buffer[0])标识该数据的类型,共有256(28 )种可能性。我的任务是必须对每一种可能出现的数据类型都要作处理,并且我的模块包含若干个函数,在每个函数里面都要作类似的处理。若按通常做法,会写出如下代码:<br /><br />void转载 2010-07-30 16:02:00 · 278 阅读 · 0 评论 -
extern用法详解
<br /><br />1 基本解释<br /> extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。<br /> 另外,extern也可用来进行链接指定。<br />2 问题:extern 变量<br /> 在一个源文件里定义了一个数组:char a[6];<br /> 在另外一个文件里用下列语句进行了声明:extern char *a;<br /> 请问,这样可以吗? <br /> 答案与分析:<br />转载 2010-07-30 13:23:00 · 308 阅读 · 0 评论 -
谈谈C99的新特征:复合文字(compound literal)和伸缩型数组
<br /> 在C99标准以前:可以给函数传递数组,但是没有所谓的数组常量可以来传递。C99新增了复合文字。文字是非符号常量。例如:5是int类型的文字;82.3是float类型的文字等等。C99标准委员会认为:如果又能够表示数组和结构内容的复合文字,那么在编写程序的时候要方便的多。 对于数组来说,复合文字看起来像在数组的初始化列表前加上圆括号括起来的类型名。例如,下面是普通数组的声明方式:int diva[2] = {10,20};下面是一个复合文字,创建了一个包含两个int值的无名称数组:(i转载 2010-07-13 12:38:00 · 442 阅读 · 0 评论 -
C/C++深层探索——读书笔记
<br />一、<br />1、关于字节顺序:话说在特定的硬件平台上,多字节数据的顺序存放有两种方式(little-endian、big-endian)。前者的数据的低字节<br /> 部分存放在低地址内存,后者恰好相反。PC一般是基于IA-32微处理器,属于little-endian。某些RISC架构的CPU,例如SPARC、<br /> POWERPC等,则属于big-endian。<br />2、调用函数、栈,变量的可见范围与生命期:我们知道一个程序由数据和代码两大部分构成,而数据有几种转载 2010-07-13 12:38:00 · 236 阅读 · 0 评论 -
restrict关键字用法
<br />看了下网上的相关贴子,但还是问题解决的不够。下面是相关一个文章,我将在后面再加相关说明:<br />那么restrict的意义是什么呢?<br /><br />概括的说,关键字restrict只用于限定指针;该关键字用于告知编译器,所有修改该指针所指向内容的操作全部都是基于(base on)该指针的,即不存在其它进行修改操作的途径;这样的后果是帮助编译器进行更好的代码优化,生成更有效率的汇编代码。<br /><br />举个简单的例子<br /><br />int foo (int* x, in转载 2010-07-15 14:32:00 · 504 阅读 · 0 评论 -
strtok()函数深入分析
<br />strtok()这个函数大家都应该碰到过,但好像总有些问题, 这里着重讲下它<br />首先看下MSDN上的解释:<br />char *strtok( char *strToken, const char *strDelimit ); <br />Parameters<br />strToken <br />String containing token or tokens. <br />strDelimit <br />Set of delimiter characters. <br />R转载 2010-07-19 14:34:00 · 248 阅读 · 0 评论 -
可重入函数与不可重入函数(转)
<br />转自:http://www.cppblog.com/franksunny/archive/2007/08/03/29269.html<br /><br />主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。<br />也可以这样转载 2010-07-19 14:41:00 · 224 阅读 · 0 评论 -
C++学习经典
<br />C++学习经典: <br />1.把C++当成一门新的语言学习。 <br />2.看《Thinking In C++》,不要看《C++变成死相》; <br />3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看; <br />4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言; <br />5.不要放过任何一个看上去很简单的小转载 2010-07-19 14:24:00 · 274 阅读 · 0 评论 -
什么是可重入函数
<br />可重入函数 <br /><br /> 在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料的后果。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会 出错。不可重入函数在实时系统设计中被视为不安全函数。 <br /><br /> 满足下列条件的函数多数是不可重入的: <br /> <br /><b转载 2010-07-19 14:40:00 · 466 阅读 · 0 评论 -
c与c++ static函数的区别
c与c++ static函数的区别static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准).(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数下面就这三种使用方式及注意事项分别说明一、局部静态变量在C/C++中, 局部变量按照存储形式可分为三种auto, static, register(谭浩强, 第174-175页)与aut转载 2010-07-20 14:46:00 · 259 阅读 · 0 评论 -
用好printf和scanf
<br />在C中,printf系列函数(fprintf, sprintf...)和scanf(fscanf, sscanf...)函数功能很强大,用好了的话,很多字符操作都可以很简单,甚至一些简单的正则匹配的工作也可以用scanf来完成,下面是几个例子。<br /><br />1. printf:<br /><br />a) 前导“0”:printf("%05d", n); // n=10, print: "00010"<br /><br />b) 左对齐:printf("%-5d|%5d", n, n)转载 2010-07-26 10:05:00 · 322 阅读 · 0 评论 -
scanf()函数的用法和实践
scanf()函数的用法和实践daizh摘要:本文阐述了基于ANSI,Win 95,Win NT上的 C/C++语言中scanf()函数的用法,以及在实际使用中常见错误及对策。关键词:scanf()一、 序言在CSDN论坛的C/C++版块,我时常见到“对于scanf()函数的用法、及出现的各种错误而迷惑”的帖子,萌发了我写这篇文章的念头。文中结合自身在学习和编程中对它的认识和体会,以具体示例阐述问题,目的在于使得初学者能够正确使用scanf()函数,少走不必要的弯路。二、转载 2010-07-26 10:03:00 · 313 阅读 · 0 评论 -
请不要用extern声明全局变量
<br />如果要定义一个全局变量,传统的做法通常是:<br />//头文件<br />extern int i;<br />//实现文件<br />int i = 0;<br /><br />这种做法在Effective C++ 第三版的条款04有讨论过,潜在的问题是可能会出现不同编译单元初始化顺序未定义的问题。<br />更好的替代方案是:以一个Meyers’单件实现之<br />inline int& i() {<br /> static int instance;<br />转载 2010-07-29 12:30:00 · 399 阅读 · 0 评论 -
C++ string::size_type 类型
<br />int main()<br />{<br /> string str("Hello World!/n");<br /> cout << "The size of " << str << "is " << str.size()<br /> << " characters, including the newline" << endl;<br /> return 0;<br />} 从逻辑上来讲,size() 成员函数似乎应该返回整形数值,或是无符号整数。但事实转载 2010-07-29 15:48:00 · 573 阅读 · 0 评论 -
c语言中的结构(struct)和联合(union)简介
<br /> 看到有朋友介绍union,我以前还没有用过这个东西呢,也不懂,就去搜了点资料来看,也转给大家,希望坛子里的给予改正或补充。谢谢!<br /><br /> 联 合(union)<br /><br /> 1. 联合说明和联合变量定义<br /><br /> 联合也是一种新的数据类型, 它是一种特殊形式的变量。<br /><br /> 联合说明和联合变量定义与结构十分相似。其形式为:<br /><br /> union 联合名{<br /><br /> 数据类型 成员名;<b转载 2010-07-28 10:34:00 · 473 阅读 · 0 评论 -
关于string中的成员函数size()和length()
两个一样,最初string 类只有length(),引入STL 后,为了兼容,又加入了size(),两个结果一样。可以参考c++ prime plus .原创 2010-07-30 11:47:00 · 445 阅读 · 0 评论 -
implicit declaration 导致的crash
公司的intern在修改samba源码时,新加了一个配置项。 lp_keytab_principals()这个函数返回const char **在用const char **p = lp_keytab_principals()的时候,有waring warning: initialization makes pointer from integer withou原创 2014-01-10 18:07:31 · 408 阅读 · 0 评论