1、strrchr()函数:查找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置),并返回从字符串中的这个位置起,一直到字符串结束的所有字符。如果未能找到指定字符,那么函数将返回NULL。
2、strstr() 函数:搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。
3、
do { ... }while(0)
有个好处里面运行可以直接break到下面代码而不用goto
4、使用strncpy_s 比 使用strncpy更加安全
5、 int const * | p
p就是一个普通的指针变量,可以指向任意一个int值,但是指向的int值是一个不变常量
int * | const p
p是const常量,p是const所以不能变,也就是p指向的地址不可变,但是指向的地址中对应
的内存是可改变的
6、Debug编译成功运行时提示缺失ACEd.dll等dll,就是要把这些文件放入到输出文件目录(在VS配置属性链接器常规里面设置输出文件路径)
7、好多这种用法:
class CDownload: { public: <strong> static CDownload &Instance() { static CDownload s; return s; }</strong> void Start(uString strPostfix); } <strong>CDownload::Instance().</strong>Start(strPostfix);
</pre><pre code_snippet_id="325463" snippet_file_name="blog_20140504_2_7731808" name="code" class="cpp">
8、在宏定义define中经常看到两个字符串##和#,这里把它的用法做一下说明:
##是一个连接符号,用于把参数连在一起
例如: > #define FOO(arg) my##arg 则 > FOO(abc) 相当于 myabc
#是“字符串化”的意思。出现在宏定义中的#是把跟在后面的参数转换成一个字符串
例如: > #define STRCPY(dst, src) strcpy(dst, #src) 则 > STRCPY(buff, abc) 相当于 strcpy(buff, "abc")
另外,如果##后的参数本身也是一个宏的话,##会阻止这个宏的展开 。
STL之copy函数原型:
template<class InputIterator, class OutputIterator> OutputIterator copy( InputIterator _First, InputIterator _Last, OutputIterator _DestBeg );
//如: 将数组向左移动两位
copy(src + 2, src + 7, src);