在live555的UsageEnvironment目录内的include/strDup.hh头文件和strDup.cpp程序文件,重新实现了标准C库函数strDup()和strDupSize(),用于实现字符串的拷贝和新建字符串同等的内存空间。
strDup.hh源码解析:
1.#ifndef _STRDUP_HH //条件宏定义,防止重复包含相同头文件
2.#define _STRDUP_HH //若未定义_STRDUP__HH,则定义
3.#include <string.h> //包含标准库字符串处理函数相关头文件string.h
4.//声明字符串拷贝函数strDup
5.//返回备份字符串的指针。若形参str为NULL,则返回NULL。
6.char* strDup(char const* str);
7.
8.char* strDupSize(char const* str);
9.// Like "strDup()", except that it *doesn't* copy the original.
10.//类似“strDup()”,其不能复制原字符串。
11.// (Instead, it just allocates a string of the same size as the original.)
12.//其仅分配一个和原字符串同样的内存空间。
13.//其返回分配的内存空间指针。
14.
15.char* strDupSize(char const* str, size_t& resultBufSize);
16.// An alternative form of "strDupSize()" that also returns the size of the allocated buffer.
17.//另一种“strDupSize()”的实现。其返回分配的内存空间指针。
18.#endif //条件宏定义结束
strDup.cpp源码解析:
1.#include "strDup.hh"
2./*
3.*函数名:strDup
4.*参数:char const * str原字符串指针
5.*功能:在内存中创建字符串str的一个备份
6.*返回值:备份字符串的指针
7.*/
8.char* strDup(char const* str) {
9. if (str == NULL) return NULL; //若为空,则返回NULL空指针。
10. size_t len = strlen(str) + 1; //计算原字符串的长度,strlen不计算‘\0’,因此加1
11. char* copy = new char[len]; //新建字符串内存空间
12.
13. if (copy != NULL) { //若不为空,则把原字符串内容拷贝到备份字符串内存空间
14. memcpy(copy, str, len);
15. }
16. return copy; //返回备份字符串内存空间的指针
17.}
18.
19./*
20.*函数名:strDupSize
21.*参数:char const * str原字符串指针
22.*功能:在内存中创建和字符串str相同的内存空间,不拷贝原字符串内容到新字符
23.* 串空间中。
24.*返回值:新字符串的指针。
25.*/
26.
27.char* strDupSize(char const* str) {
28. size_t dummy; //size_t是unsigned int,定义一个虚值,表示新字符串长度
29.
30. return strDupSize(str, dummy); //返回调用两个形参strDupsize函数的返回值
31.}
32.
33./*
34.*重名函数,strDupSize的另一种实现
35.*函数名:strDupSize
36.*参数:char const * str原字符串指针
37.*功能:在内存中创建和字符串str相同的内存空间,不拷贝原字符串内容到新字符
38.* 串空间中。
39.*返回值:新字符串的指针。
40.*/
41.
42.char* strDupSize(char const* str, size_t& resultBufSize) {
43. if (str == NULL) { //若原函数为空
44. resultBufSize = 0; //则,新建内存空间大小设置为0
45. return NULL; //返回空指针
46. }
47.
48.//计算原字符串的长度,strlen不计算‘\0’,因此加1
49. resultBufSize = strlen(str) + 1;
50. char* copy = new char[resultBufSize]; //新建字符串内存空间
51.
52. return copy; //返回新字符串指针
53.}