分析live555源码第2集:strDup.hh和strDup.cpp

在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.}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值