程序修改,等待中
我写了一个小函数,Str类的字符串存储采用的是固定字符数组方案,用指针方案(在构造函数里动态分配字符数组)重新实现Str类
#include<stdio.h>
#include<string.h>
class Str
{
public:
Str(char *ch);
Str(Str &a);
void print();
private:
char mstr[512];
};
Str::Str(char *ch)
{
strcpy(mstr,ch);
}
void Str::print ()
{
printf("%s\n",mstr);
}
Str::Str(Str &a)
{
printf("copy is :%s\n",a.mstr);
}
int main(int argc, char *argv[])
{
Str a("hello world");
a.print ();
Str b(a);
return 0;
}
希望大家帮忙帮我实现一下,让我学习一下怎么样实现动态分配,谢谢!!!
问题点数:20、回复次数:10Top
1 楼qhfu(改个名字)回复于 2005-08-18 00:33:14 得分 10
#include <iostream>
using namespace std;
#include<stdio.h>
class Str
{
public:
Str(char *ch);
Str(Str &a);
void print();
~Str()
{
delete mstr;
}
private:
char * mstr;
};
Str::Str(char *ch)
{
mstr = new char[strlen(ch)+1];
strcpy(mstr,ch);
}
void Str::print ()
{
printf("%s\n",mstr);
}
Str::Str(Str &a)
{
mstr = new char[strlen(a.mstr) + 1];
strcpy(mstr,a.mstr);
printf("copy is :%s\n",a.mstr);
}
int main(int argc, char *argv[])
{
Str a("hello world");
a.print ();
Str b(a);
b.print();
system("pause");
return 0;
}
Top
2 楼baiywcwttfln(A-De)回复于 2005-08-18 00:53:04 得分 3
析构函数错了
~Str()
{
delete []mstr;
}
Top
3 楼K()回复于 2005-08-18 00:54:25 得分 0
~Str(){delete []mstr}Top
4 楼snowbirdfly(专心搞好嵌入式~~~)回复于 2005-08-18 01:02:12 得分 0
mstr = new char[strlen(a.mstr) + 1];//很重要
顶一下~~
支持上面高手~~Top
5 楼qhfu(改个名字)回复于 2005-08-18 11:38:44 得分 0
baiywcwttfln(A-De)
指出的是,一时疏忽了, 呵呵Top
6 楼gryes(幽火)回复于 2005-08-18 11:46:27 得分 0
谢谢各位!
mstr = new char[strlen(a.mstr) + 1];//
我不是很懂,请帮我解释下,再次感谢!!!
我是新手,没有很多加分,各位见谅!!Top
7 楼bugebear3(bug)回复于 2005-08-18 16:15:13 得分 5
mstr = new char[strlen(a.mstr) + 1];
--------------------------------------------------------
用new动态分配内存,上面分配一个char类型的数组,数组元素的个数为strlen(a.mstr) + 1,由于strlen()不包括字符串最后的结束符'\0',所以加1Top
8 楼corrupt(喜欢 睡在床板下 的思考)回复于 2005-08-18 16:45:20 得分 1
都学了c++,何必 还用#include<string.h>呢??
可以用#include<string> 字符串 就用string 把,不要再 用char *mstr了哦~~Top
9 楼sunlu_eric(天使预备役)回复于 2005-08-18 16:46:04 得分 1
delete mstr;
这样也对吧?我记的是!Top
10 楼gryes(幽火)回复于 2005-08-18 19:35:59 得分 0
我好像知道点了,谢谢各位!
多谢多谢!!!!!!!!!!!!!!!!!Top




