我一直在努力解决这个问题,应该是直截了当的。这是一个简单的“C String”实现的开始,它们遍布互联网。但是,我的工作不起作用......当它到达~CString()
并调用delete[] _data;
时它会崩溃。我不知道为什么。
这是CString.h
#ifndef CSTRING_H
#define CSTRING_H
#include <cstring> // strlen
class CString
{
char* _data;
unsigned int _size;
unsigned int _length;
public:
CString();
CString(const char* data_);
CString(const char* data_, unsigned int size_);
CString(const CString& other_);
~CString();
const char* get_data() const;
unsigned int get_size() const;
unsigned int get_length() const;
void assign();
void assign(const char* data_);
void assign(const char* data_, unsigned int size_);
};
#endif // CSTRING_H
这是CString.cpp
#include "./CString.h"
CString::CString()
{
_data = 0;
_size = 0;
_length = 0;
}
CString::CString(const char* data_)
{
_size = strlen(data_) + 1;
_length = strlen(data_);
_data = new char(_size);
strncpy(_data, data_, _size);
}
CString::CString(const char* data_, unsigned int size_)
{
_size = size_;
_length = size_;
_data = new char(_size);
strncpy(_data, data_, _size);
}
CString::CString(const CString& other_)
{
_size = other_._size;
_length = other_._length;
_data = new char(_size);
strncpy(_data, other_._data, _size);
}
CString::~CString()
{
if (_data)
{
delete[] _data;
}
}
const char* CString::get_data() const
{
return _data;
}
unsigned int CString::get_size() const
{
return _size;
}
unsigned int CString::get_length() const
{
return _length;
}
void CString::assign()
{
if (_data)
{
delete[] _data;
}
_size = 0;
_length = 0;
_data = 0;
}
void CString::assign(const char* data_)
{
if (_data)
{
delete[] _data;
}
_size = strlen(data_) + 1;
_length = strlen(data_);
_data = new char(_size);
strncpy(_data, data_, _size);
}
void CString::assign(const char* data_, unsigned int size_)
{
if (_data)
{
delete[] _data;
}
_size = size_;
_length = size_;
_data = new char(_size);
strncpy(_data, data_, _size);
}
最后,这是main.cpp所做的全部:
int main(int argc_, char** argv_)
{
CString info_message("Hello world!");
}
这似乎是一项如此简单的任务,但我已经坚持了几个小时!也许这对其他人来说是一个难题,或者它可能是一个简单的解决方案。我不知道。感谢您提前提供任何帮助。
答案 0 :(得分:4)
_data = new char(_size);
这是创建一个单个字符,其值为_size
。
_data = new char[_size];
这可能是你想要的。它构造了一个总长度为_size
的字符数组。
答案 1 :(得分:0)
您是否尝试过更换
_data = new char(_size);
与
_data = new char[_size];
如果我没弄错,通常在初始化数组时使用[]。