为指向 const 的指针赋值 指向 const char 的指针 (const char * const * p)
Posted
技术标签:
【中文标题】为指向 const 的指针赋值 指向 const char 的指针 (const char * const * p)【英文标题】:Assigning a value to a pointer to a const pointer to a const char (const char * const * p) 【发布时间】: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
?
【参考方案1】:
考虑到Some programmer dude、Miles Budnek 和其他人给出的提示,我能够解决问题,如下所述:
在我最初的问题中,密钥由string keys = "a b c d e";
表示。
但在我正在处理的任务中,a b c d e
是通过迭代 set<string>
项目构建的。下面是它的完成方式:
struct Keywords
const char* const* keys;
int count;
Keywords GetKeywords()
Keywords keywords;
keywords.count = 5;
set<string> keys;
GetKeys(keys);//returns keys = "a", "b", "c", "d", "e"
char** charKeysPtr = new char *[keys.size() + 1];
set<string>::iterator it;
int index = 0;
//Iterate the set and copy each key
for (it = keys.begin(); it != keys.end(); it++)
charKeysPtr[index] = new char[it->size() + 1];
strcpy(charKeysPtr[index], it->c_str());
charKeysPtr[index][it->size()] = '\0';
index++;
keywords.Keys = charKeysPtr;
return keywords;
int main(int argc, char *argv[])
Keywords keywords = GetKeywords();
//Print keys
for (int i = 0; i < keywords.count; ++i)
cout << keywords.keys[i] << " ";
//Output is "a b c d e"
//Memory cleanup and etc.
谢谢你们!
【讨论】:
以上是关于为指向 const 的指针赋值 指向 const char 的指针 (const char * const * p)的主要内容,如果未能解决你的问题,请参考以下文章