CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

程序修改,等待中

楼主gryes(幽火)2005-08-18 00:19:45 在 C/C++ / C++ 语言 提问

我写了一个小函数,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

相关问题

  • 修改bios中断程序?
  • 程序在运行中修改自己?
  • 怎样在程序中修改App.Config
  • 一个简单问题请教各位大虾,怎样在程序中修改本机的IP地址,在线等待
  • 怎么MFC程序中修改网页表单的值?200分求源程序
  • 如何在程序中修改sql server的默认数据库?
  • 关于中文安装程序制作_修改_Isuer.dll
  • 如何在程序中修改TOOLBAR的TOOLTIP?
  • 怎样在程序中修改,使MDI子窗口最大化????
  • 请教;如何在程序中修改短日期格式?

关键词

  • 函数
  • mstr
  • 数组
  • 字符串
  • str
  • strlen
  • 谢谢
  • ch
  • 动态分配
  • print

得分解答快速导航

  • 帖主:gryes
  • qhfu
  • baiywcwttfln
  • bugebear3
  • corrupt
  • sunlu_eric

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo