【发布时间】:2018-06-11 08:49:21
【问题描述】:
我是 C++ 新手,正在努力使以下代码正常工作:
struct Keywords
{
const char* const* keys;
int count;
}
Keywords GetKeywords()
{
Keywords keywords;
keywords.count = 10;
string keys = "a b c d e";
keywords.keys = keys???;
return keywords;
}
int main(int argc, char *argv[])
{
Keywords keywords = GetKeywords();
cout<<keywords.count<<endl; //prints 10
cout<<keywords.keys<<endl; //prints a memory address like 0030F838
}
如何使keys 指向a b c d e?
到目前为止,我已经尝试过这个
char * writable = new char[keys.size() + 1];
strcpy(writable, keys.c_str());
writable[keys.size()] = '\0';
const char* a = writable;
const char** ptr = &a;
results.keys = ptr;
在调试时我可以看到results.keys 显示a b c d e,但一旦返回GetKeywords(),results.keys 就会指向不可读的内存位置。
我无法对 struct Keywords 和 GetKeywords() 方法签名进行任何更改。
【问题讨论】:
-
您的尝试是错误的,因为您在
GetKeywords函数中存储了指向局部变量的指针。一旦函数返回函数内部所有局部变量的生命周期结束,它们就会超出范围。 -
为什么不使用
std::vector<std::string>? -
你想要一个指针指向指针的原因是什么?你想要一个字符串“数组”,其中第一个元素是字符串
"a",第二个元素是"b"等等?您遇到的真正问题是什么? -
@Someprogrammerdude 是的,我本可以使用更简单的方法来返回值,但这是一项任务,我无法完成最后一部分。结果应作为关键字 GetKeywords() 返回。没有其他选择。
-
@ulughbekula :就像 Miles Budnek 所问的那样,为什么不在这里使用
std::vector<std::string>呢?您是否被禁止更改作业中的struct Keywords?