【发布时间】:2021-06-19 00:20:51
【问题描述】:
我已经定义了一个char* content 类型的属性,它接受一个字符串,该字符串甚至包含\0 这样的字符,这样我就不能使用string 类型。
当我尝试为内容定义设置器时,这里的问题是:
void MyClass::setContent(char* content)
{
if(this->contentLength!=0){
if(this->content)
free(this->content);
this->content = (char*)malloc(this->contentLength);
memset(this->content,0,this->contentLength);
memcpy(this->content,content,this->contentLength);
}
}
知道contentLength也是MyClass的一个属性。
但是在另一个堆栈中,我定义了一个返回 MyClass 对象的函数:
MyClass myfunction(args) {
MyClass myclass;
/**
*Do some stuff on myclass
*/
return myclass;
}
在另一个堆栈上,我已经定义了这个:
MyClass element = myFunction(args);
这里我丢失了内容,因为它总是指向第一个堆栈中myclass 的地址。
如何将content 复制到新对象element?
我正在处理C++98,无法实施c++11 上的任何解决方案。
【问题讨论】:
-
如果你有一个 C++98 编译器,你可以编译(从它的源代码)一个最近的 GCC 编译器(例如 GCC 10 在 2021 年初,然后你有一个 C+ +14 编译器在您的计算机上(当然您可以使用
std::stringand the string library -
@BasileStarynkevitch,我别无选择,只能使用 C++98。我在嵌入式环境中工作。
-
GCC 可以编译为嵌入式处理器的交叉编译器。参见例如CHARIOT 和 this draft report。更多信息,请给我发电子邮件(英文或法文)至
basile@starynkevitch.net -
@BasileStarynkevitch,问题是
content包含的字符和符号据我所知如果我使用\0这样的字符串是不被接受的。 -
std::string接受任何char,包括'\0'。 C++98 或现代 C++。但如果不是std::string,另一个比原始char*更好的可行替代方案是std::vector<char>。
标签: c++ arrays string reference char