| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 907 人关注过本帖
标题:strcpy() 在里面的意思我有点糊涂了
只看楼主 加入收藏
dang800919
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2005-12-5
收藏
 问题点数:0 回复次数:8 
strcpy() 在里面的意思我有点糊涂了
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
class String
{
public:
String& operator+=(const String&);
String& operator+=(const char*);
int size() {return _size;}
char* c_str() {return _String;}
private:
int _size;
char* _String;
};
inline String& String::operator+=(const String &rhs)
{
if(rhs._String)
{
String tmp(*this);
_size = _size + rhs._size;
delete [] _String;
_String = new char[_size+1];
strcpy(_String,tmp._String);
strcpy(_String + tmp._size,rhs._String); // 这条语句 的意思 ....不太明白了...
}
return *this;
}
inline String& String::operator+=(const char *s)
{
if(s)
{
String tmp(*this);
_size = _size + strlen(s);
delete[] _String;
_String = new char[_size+1];
strcpy(_String,tmp._String);
strcpy(_String + tmp._size,s);
}
return *this;
};
搜索更多相关主题的帖子: String strcpy operator rhs 糊涂 
2006-02-22 23:15
zorro2zzz
Rank: 1
等 级:新手上路
威 望:1
帖 子:96
专家分:0
注 册:2005-9-11
收藏
得分:0 
inline是啥意思?告诉俺……
初学中……

编程是啥东西,让俺瞧瞧……
2006-02-23 01:41
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
在理解inline之前,你必须要理解计算机的存储方式以及工作方式,说到数据,你自然会想到 int, double, char 之类的数据,以及其他的你设计的数据类型,如果我告诉你这些数据必须存放在计算机的内存中,你大概可以理解。那么那些函数呢?如果你有一点C的基础,那么你对 subfunction 不会陌生,现在我提个问题,这些函数放在哪里?计算机是如何调用函数的?你不会告诉我,函数不用存放吧? 函数当然需要存放,我来告诉你,函数和信息数据是分开存放的,那个main() 也是一个函数哦,当然也要存放的。我们之所以写子函数,就是因为这个函数要被多次调用。那么多次调用意味着什么?意味着数据的反复跳跃,这样就降低了效率,如果我们不采用子函数,而是将代码完全放在一个函数中呢?那么执行该函数时就没有跳跃现象了,当然效率就高了。这就是 C 里面的 define 所干的事情,到C++ 就是 inline 了。 inline 到底是怎么回事呢?inline 就是将那个被定义为 inline 的那个函数 copy 到它所被调用的地方,程序就不用跳跃访问函数了,不过有一个规定,这是不成文的规定,如果你要将一个函数定义为inline 函数,这个函数的代码不可以长,通常在5行代码之内,这样做是为了避免内存的过大开销。
理解了没有?

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-02-23 02:21
zorro2zzz
Rank: 1
等 级:新手上路
威 望:1
帖 子:96
专家分:0
注 册:2005-9-11
收藏
得分:0 
谢谢,明白许多了,kai !

[此贴子已经被作者于2006-2-23 12:24:54编辑过]



编程是啥东西,让俺瞧瞧……
2006-02-23 12:24
zelda
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-2-24
收藏
得分:0 
private:
int _size;
char* _String;
……
strcpy(_String + tmp._size,rhs._String); // 这条语句 的意思 ....不太明白了...


其实就是就因为_String是指针表示一个地址,_String + tmp._size就是在_String表示的的地址基础上向后移动tmp._size个单元,然后将rhs._String的值,按字节从(_String + tmp._size)位置开始填充。个人认为用(char *)(rhs._String).c_str()替换rhs._String更好,这样都转成char *。
2006-02-24 23:36
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
zelda,
楼主这个String类是他自己定义的,不是C++ 里面的那个 string 类,所以你说的 c_str() 这个函数没法用的,除非楼主的类定义中也定义了这个函数。

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-02-25 01:11
zelda
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-2-24
收藏
得分:0 
呵呵,多谢kai的提醒
2006-02-25 09:35
yqh
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-2-17
收藏
得分:0 
3楼说的好呀!
我只知道inline是内联函数,等效于把inline后面的函数写在类里面!

愿与所有的编程爱好者分享编程的快乐!
2006-02-27 19:10
GISboy
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-2-28
收藏
得分:0 

三楼说的很好啊,希望以后斑竹都能在内存模型之上去解答我们的问题!


2006-02-28 20:03
快速回复:strcpy() 在里面的意思我有点糊涂了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015358 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved