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")
另外,如果##后的参数本身也是一个宏的话,##会阻止这个宏的展开 。
9、strcpy是拷贝字符串,以\0为标志结束(即一旦遇到数据值为0的内存地址拷贝过程即停止)
strcpy的原型为 char *strcpy(char *dest, const char *src)
memcpy是给定来源和目标后,拷贝指定大小n的内存数据,而不管拷贝的内容是什么(不仅限于字符)
memcpy的原型为 void *memcpy(void *dest, const void *src, size_t n);
STL之copy函数原型:
template<class InputIterator, class OutputIterator> OutputIterator copy( InputIterator _First, InputIterator _Last, OutputIterator _DestBeg );
//如: 将数组向左移动两位
copy(src + 2, src + 7, src);