问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++编写成员函数GetString,使其能返回该类的字符串,但不能通过外部变量修改该类内部的字符串。

发布网友 发布时间:2022-05-10 20:18

我来回答

2个回答

热心网友 时间:2023-10-28 12:29

问题是在字符串作为函数参数的传值问题。
C没有string类,但是C++有,如果依赖于字符数组管理字符串必须理解字符串、字符数组、指针之类的概念。

char a[]定义了一个数组,a的类型是char [],有自己的空间存储字符。
当a作为参数传递给函数是,参数类型会变为char *,仅仅传递了a的首地址。如果在函数里对a进行操作,也会影响函数外的数组。

因此该类的设计应该是:
类必须有自己的字符数组空间,来存储char *参数指向的字符串。

在构造函数里KeepString(char s[]),调用strcpy将s所指向的字符串赋值给对象的成员变量。也就是说,成员变量也必须是一个有自己空间的数组,而不是一个char *指针。

通过函数来返回该字符串,必定不能将该成员变量的地址返回,不然通过地址是可以更改字符串的。而且局部变量的内存空间在跳出代码块后会被释放,所以不能返回一个字符数组。因此需要设计一个成员函数,来接受一个char *外部参数,在函数内部同样调用strcpy将字符串内容拷贝一份至该外部参数。该外部参数需要有自己的内存空间。
伪代码:
class A
{
char s[100];//足够大的数组
A(char *t); //将t指向的字符串拷贝至成员变量s;
getString(char *t); //将s拷贝至参数t指向的内存空间
}
main()
{
char t[];
A a(t);
char str[]
a.getString(str);
}
具体代码自己完善

热心网友 时间:2023-10-28 12:30

#include<iostream>
#include<string.h>

using namespace std;

class KeepString{
private:
char *str;
public:
KeepString(const char s[]);
char* GetString();
};

KeepString::KeepString(const char s[]){
str = new char[strlen(s)+1];
strcpy(str,s);
}

char* KeepString::GetString(){
char *s = new char[strlen(str)+1];
strcpy(s,str);
return s;
}

int main(){
KeepString KS("Internal String");
char *p = KS.GetString();
p[0] = 'i';
p[9] = 's';
cout << p << endl;
cout << KS.GetString() << endl;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...另有一盒质量不足,轻一些。至少称几次能保证找出这盒月饼... 9盒月饼中,有一盒质量不足,至少称()次能保证找出这盒月饼 A,2 B,3... 有244盒饼干其中有一盒饼干质量不足这一核轻一些至少称几次才能保证找出... 怎么处理梭子蟹更干净? 有什么学生去西藏穷游的打卡线路分享? 小米13手机系统导航方式哪种好用 哪些公交路线可以到犀浦车管所? 19世纪末,中国面临深重的民族危机。为了挽 救民族危亡,中国人民进行... 为什么我一听伤心的歌情绪很低落。听快节奏的歌就想跳。可是室友们没... 为什么我总是听着伤心的歌就低落 rs.getString(1) 有什么功能? C#关于getstring函数和fill函数 有没有一款录屏软件能够录制手机声音而不录制外源声音,没有水印,悬浮窗也录不进去的那种? 能够消除个人征信不良记录吗 征信有不良记录,什么时候会不会自动消除 能消除不良个人征信吗? 16到18世纪欧洲对外贸易的情况 征信,影响信用.可以消除吗 被冻结了怎样解冻 外贸常识有哪些 ND18“在外贸里是什么意思,尤其是DN代表什么 我适合去做外贸吗?女,18岁 紧急冻结后怎么解冻 冻结了怎么解冻 被冻结了怎样解冻 linux关机命令-t参数,能否给个实例?如10秒后关机。 是否是 shutdown -h -t 10 now ?谢谢指教! 被冻结了怎么办? 嘉定区到菘泽大道333号 公袋鼠有没有袋子啊? 公袋鼠前面又袋子吗? eclipse里的getString函数的参数是什么意思 调用GetStringValue( &quot;DEVICE USE&quot;, &quot;VALUE&quot;, &quot;NO&quot; )函数,具体实现如下 想问下这个函数是什么功能 C#中使用 getstring转化字符的问题 如何解决java的resultset类的getstring()方法抛出nullpoint异常? 一千公里八十升油多少钱一公里 关于ResultSet.getString() DataReader.getstring(0)和DataReader[0].tostring()这两个有区别吗? Java getString() 和 getText() 返回值数据类型不同? 92号汽油或突破“8元大关”,你会考虑新能源车吗? 自驾车800公里要多少升油?多少钱? CString::GetBuffer()的原理(答了就得分!) 麻烦问下C++ getstring()是什么意思 奔驰商务一箱油多少升 加一箱油多少钱 爸爸在加油站加八升95号汽油大约需要64元那么加40升95号汽油大约需要多少钱_百度问一问 C#的一个函数问题GetStr() antolisp中initget函数什么意思?怎么用啊? 80斤汽油是多少升? SQL 从数据库里获得的数据 比如rs.getString(&quot;姓名&quot;) .length()如果姓名 38公斤汽油是多少升,每升是8.03元,共花多少钱? 95的油80公里多少钱