Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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;icout您的尝试是错误的,因为您在
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.
}