C++ 将值赋给指向常量字符的常量指针(const char*const*p) size()+1]; strcpy(charKeysPtr[index],it->c_str()); charKeysPtr[index][it->size()]='\0'; 索引++; } 关键词.Keys=charKeysPtr; 返回关键字; } int main(int argc,char*argv[]) { 关键词=GetKeywords(); //打印键 对于(int i=0;i
调试时,我可以看到C++ 将值赋给指向常量字符的常量指针(const char*const*p) size()+1]; strcpy(charKeysPtr[index],it->c_str()); charKeysPtr[index][it->size()]='\0'; 索引++; } 关键词.Keys=charKeysPtr; 返回关键字; } int main(int argc,char*argv[]) { 关键词=GetKeywords(); //打印键 对于(int i=0;i,c++,pointers,constants,C++,Pointers,Constants,调试时,我可以看到结果。键显示a b c d e,但只要返回GetKeywords(),就会显示结果。键指向无法读取的内存位置 我无法对struct Keywords和GetKeywords()方法签名进行任何更改。考虑到和其他人给出的提示,我能够解决以下问题: 在我最初的问题中,键由stringkeys=“abcde”表示。 但是在我正在做的作业中,abcde是通过迭代set项来构建的。因此,这是如何做到的: struct Keywords { const char* const* k
结果。键
显示a b c d e
,但只要返回GetKeywords()
,就会显示结果。键
指向无法读取的内存位置
我无法对
struct Keywords
和GetKeywords()
方法签名进行任何更改。考虑到和其他人给出的提示,我能够解决以下问题:
在我最初的问题中,键由stringkeys=“abcde”表示代码>。
但是在我正在做的作业中,abcde
是通过迭代set
项来构建的。因此,这是如何做到的:
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.
}
struct关键字
{
常量字符*常量*键;
整数计数;
}
关键词GetKeywords()
{
关键词;
关键词:计数=5;
设置关键点;
GetKeys(keys);//返回keys={“a”、“b”、“c”、“d”、“e”}
char**charKeysPtr=new char*[keys.size()+1];
set::迭代器;
int指数=0;
//迭代集合并复制每个键
for(it=keys.begin();it!=keys.end();it++)
{
charKeysPtr[index]=新字符[it->size()+1];
strcpy(charKeysPtr[index],it->c_str());
charKeysPtr[index][it->size()]='\0';
索引++;
}
关键词.Keys=charKeysPtr;
返回关键字;
}
int main(int argc,char*argv[])
{
关键词=GetKeywords();
//打印键
对于(int i=0;i cout您的尝试是错误的,因为您在GetKeywords
函数中存储了指向局部变量的指针。一旦函数返回函数中所有局部变量的生存期,它们就结束了,并且超出了范围。为什么不使用std::vector
?您想要指向指针的指针的原因是什么?您想要一个指针吗字符串的“数组”,其中第一个元素是字符串“a”
,第二个元素是“b“
等等?你真正的问题是什么?@Someprogrammerdude是的,我本可以用一种更简单的方法来返回值,但这是一个赋值,我就是不能让最后一部分起作用。结果应该作为关键字GetKeywords()返回.没有其他选择。@ulughbekula:就像Miles Budnek问的那样,为什么不在这里使用std::vector
?你是否被禁止更改作业中的结构关键字
?
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.
}