C++实现简单的string

为什么要重复造轮子?

在windows平台下,如果在动态库的接口中使用std::string或其它std容器,会导致崩溃或其它内存问题,所以一般要求动态库的接口必须是C语言实现。

C语言传递字符串参数有一定的限制,不够灵活,类似下面这样:

#define MAX_STRING_LEN 64
char myString[MAX_STRING_LEN];

// 字符串长度被限制在了64,不够灵活

所以自己实现一个简单够用能用的string就很有必要。

下面是我造的轮子:

struct XString
{
  XString()
    : m_str(NULL)
  {
  }

  XString(const char* str)
  {
    copy(str);
  }

  XString(const char* str, uint32_t len)
  {
    copy(str, len);
  }

  ~XString()
  {
    if (m_str != NULL)
    {
      delete[] m_str;
      m_str = NULL;
    }
  }

  void operator=(XString& src)
  {
    copy(src.str());
  }

  void copy(const char* str, uint32_t len)
  {
    m_len = len + 1;
    m_str = new char[sizeof(char) * m_len];
    memset(m_str, 0, sizeof(char) * m_len);
    strncpy(m_str, str, m_len - 1);
  }

  void copy(const char* str)
  {
    copy(str, (uint32_t)strlen(str));
  }

  const char* str()
  {
    return m_str;
  }

  char* m_str;
  uint32_t m_len;
};

使用方法:

1. 定义字符串:XString xstr("abc"); 

2. 获取C语言字符串:xstr.str();

其它容器:

C++实现简单的string array-CSDN博客

C++实现简单的string dictionary-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值