首页 > 试题广场 >

有下类定义: Class A{ Char*a; Publ

[单选题]
有下类定义:
Class A{
Char*a;
Public:
A():a(0){}
A(char*aa) {//把aa所指字符串拷贝到a所指向的存储空间
A=___________________;
Strcpy(a,aa);}
~A(){delete [] a;}
};

  • new char[strlen(aa)+1]
  • char[strlen(aa)+1]
  • char[strlen(aa)]
  • newchar[sizeof(aa)+1]
字符串最后需要有个自动添加的'\0'作为结束标志,所以+1
发表于 2020-08-20 11:07:51 回复(1)
第6行那里应该是小写的a=____。要不莫名其妙,而且Class,public首字母都被大写了,另外strcpy不安全,一般也会提示警告。
class A{
 char* a;
 public:
 A():a(0){}
 A(char*aa) {//把aa所指字符串拷贝到a所指向的存储空间
 cout<<"strlen(aa):"<<strlen(aa)<<endl;
// cout<<"*aa:"<<*aa<<endl;
 printf("aa str :%s \n",aa);
 a=new char(strlen(aa)+1);
 strcpy_s(a,strlen(aa)+1,aa);
 }
 ~A(){delete [] a;}
};


发表于 2022-03-01 15:09:13 回复(0)
题目中那个A=___________________;
的那个A是因为句首大写的缘故吗?
实际上应该是a=___________________;
发表于 2020-10-09 21:16:49 回复(3)
在类A的构造函数中,将参数aa所指字符串拷贝到a所指向的存储空间,可以使用以下方式:
A(char* aa) {
    a = new char[strlen(aa) + 1]; // 为a分配内存空间,大小为aa所指字符串的长度+1
    strcpy(a, aa); // 将aa所指字符串拷贝到a所指向的内存空间
}

上述代码中,new char[strlen(aa) + 1]用于动态分配内存空间,strlen(aa)获取参数aa所指字符串的长度,+1是为了留出末尾的空字符\0的位置。然后使用strcpy(a, aa)将aa所指字符串拷贝到a所指向的内存空间。

需要注意的是,在类A的析构函数中,使用delete [] a来释放a所指的动态分配的内存空间,防止内存泄漏。



发表于 2023-04-11 11:33:58 回复(0)
最后都执行内存释放了
发表于 2021-09-11 14:50:14 回复(0)