使用字符串作为char

时间:2018-03-11 00:13:41

标签: c++

我已经给出了这个定义,函数应该返回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;
}

1 个答案:

答案 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风格字符串上存储,复制,修改等字符串的首选选项。