MemB.h的代码:
#pragma once#ifndef MEMB#define MEMBtypedef unsigned char byte;class MemB{private: byte * mem; int size; void ensureMinSize(int minSize);public: MemB(); MemB(int sz); int msize(); byte * pointer(); byte * pointer(int minSize); ~MemB(void);};#endif
MemB.cpp的代码:
#include "stdafx.h"#include "MemB.h"#includeusing namespace std;MemB::MemB(int sz){ mem=0; size=0; ensureMinSize(sz);}MemB::MemB(){ mem=0; size=0;}int MemB::msize(){ return size;}void MemB::ensureMinSize(int minSize){ if(size
MyString的代码和main函数:
#include "stdafx.h"#include#include #include "MemB.h"using namespace std;class MyString{ MemB *buf;public: MyString(); MyString(char * str); ~MyString(); void concat(char * str); void print(ostream &os);};MyString::MyString(){ buf = 0;}MyString::MyString(char * str){ buf = new MemB(strlen(str)+1); strcpy((char *)buf->pointer(),str);}void MyString::concat(char * str){ if(!buf)buf=new MemB; strcat((char*)buf->pointer(buf->msize()+strlen(str)+1),str);}void MyString::print(ostream & os){ if(!buf)return; os< pointer()<
strcpy遇到的不安全问题可以通过这个来解决:
http://jingyan.baidu.com/article/ce436649fd61543773afd32e.html
1. char *strcpy(char* dest, const char *src);
把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。
2.extern char *strcat(char *dest,char *src);
把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')。
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。