字符串函数问题

shore1111 2008-03-10 09:11:35
[code ]

头文件:
#ifndef MEM_H
#define MEM_H
typedef unsigned char byte;

class Mem{
byte *mem;
int size;
void ensureMinSize(int minSize);
public:
friend class MyString;
Mem();
Mem(int sz);
~Mem();
int msize();
byte *pointer();
byte *pinter(int minSize);
};
#endif

主程序

#include "Mem.h"
#include <cstring>
#include <iostream>
using namespace std;


class MyString{
Mem *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 Mem(strlen(str)+1);
strcpy((char*)buf->pointer(),str);//?????为什么是char * strcpy不是(地址1,地址2)吗
}

void MyString::concat(char *str)
{
if(!buf) buf=new Mem;
strcat((char *)buf->pointer(buf->size)+strlen(str)+1,str);///?????function does take 1 parameters
}


void MyString::print(ostream&os)
{
if(!buf) return ;
os<<buf->pointer()<<endl;
}

MyString::~MyString(){delete buf;}

int main()
{
MyString s("My test string");
s.print(cout);
s.concat("some additional stuff");
s.print(cout);
MyString s2;
s2.concat("Using default construction");
s2.print(cout);
return 0;

}

多谢!!

[/code]
...全文
91 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gumpw 2008-03-12
  • 打赏
  • 举报
回复
strcpy((char*)buf-> pointer(),str);//?????为什么是char * strcpy不是(地址1,地址2)吗

char* strcpy(char* dest, const char * src);
char* 不就是一个地址吗

///////////////////////////////
strcat((char *)buf-> pointer(buf-> size)+strlen(str)+1,str);///?????function does take 1 parameters

char* strcat(char *dest, const char *src);src 连接到dest 后面,当然是两个参数了
第一个char *)buf-> pointer(buf-> size)+strlen(str)+1
第二个str
shore1111 2008-03-12
  • 打赏
  • 举报
回复
问题解决了

第一个问题
char *是类型转换

第二个问题

pointer ( int)声明出现问题
shore1111 2008-03-10
  • 打赏
  • 举报
回复
补充:

#include "Mem.h"
#include <cstring>
using namespace std;

Mem::Mem(){mem=0; size=0;}

Mem::Mem(int sz){
mem=0;
size=0;
ensureMinSize(sz);
}

Mem::~Mem(){delete []Mem;}
int Mem::msize(){return size;}

void Mem::ensureMinSize(int minSize)
{
if(size<minSize){
byte*newmem=new byte[minSize];
memset(newmem+size,0,minSize-size);
memcpy(newmem,mem,size);
delete[]mem;//delete old storage
mem=newmem;
size=minSize;
}
}

byte *Mem::pointer(){return mem;}

byte *Mem::pointer(int minSize)
{

ensureMinSize(minSize);
return mem;
}
星羽 2008-03-10
  • 打赏
  • 举报
回复
pointer 函数的实现在哪里?
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-03-10 09:11
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下