我已经给出了这个定义,函数应该返回info->短语中的内容。但是,info->短语可以包含一个字符串,在这种情况下,我只能让它返回info->短语中的第一个字符。有没有办法使字符串与char类型兼容?我是c ++的新手。
struct rep_info {
int num;
char *phrase;
};
我尝试了一些但得到类型错误,这是我最近的尝试
char *phrase_info(rep_info info) {
char text[std::strlen(info->phrase) + 1];
text = info->phrase;
return text;
}
答案 0 :(得分:0)
由于您说您已获得这些定义,因此请先解决当前设置的问题。查看您的函数,您正在尝试复制到此本地数组(我可能会添加错误),并返回此局部变量。这有很多问题,包括语法和函数退出时局部变量被破坏的事实。
如果您只需要获取短语成员变量的值,最简单的解决方案是直接访问成员变量并返回它:
char *phrase_info(rep_info *info) {
return info->phrase;
}
如果你想传递一个指向函数的指针,你可以像这样重写它:
info->phrase
但您觉得有必要将char *phrase_info(rep_info *info) {
char *buf = new char[std::strlen(info->phrase) + 1];
std::strcpy(buf,info->phrase); //copies info->phrase into buf
return buf;
}
的内容复制到新的内存空间?如果是这样,那么你会做这样的事情,你首先分配新的内存并返回这个缓冲区:
delete
然后,您需要在返回的内存值上使用new
来清理class rep_info {
private:
int num;
std::string phrase;
public:
rep_info(int n, std::string p) : num(n), phrase(p) {}
std::string get_phrase() { return phrase; }
// other functions
};
//later in the code
rep_info info(...);
info.get_phrase();
分配的内存,否则会导致内存泄漏。
总的来说,上述所有解决方案都可能解决问题,因为您已经明确了一些参数。为了解决这个问题,这应该写得更像:
std::string
理想情况下,您可以将这些成员变量包装到自己的对象中,并使用可以获取和设置这些值的相应成员函数。此外,为了在C ++中处理字符串,char *
是在旧的nvd3
C风格字符串上存储,复制,修改等字符串的首选选项。