C++ 如何将字符**中的数据值复制到新字符**?

C++ 如何将字符**中的数据值复制到新字符**?,c++,string,struct,C++,String,Struct,我的工作内容: 你好我目前有一个char**变量,它是指向字符串数组的指针。我有一个循环,在这个循环中,char**需要备份到结构向量。因此结构中有一个变量类型char**。 不幸的是,对于这篇文章,我必须使用char**类型。我无法使用char*vName[]类型 我的问题是: 我目前面临的问题是,当我添加一个新结构时,char**指向所有结构中可用的最新数据,而不是最近的数据 我所尝试的: 我尝试过使用strcpy、memcpy和普通的旧值,但它们似乎不起作用。我尝试过使用newItem.s

我的工作内容:
你好我目前有一个
char**
变量,它是指向字符串数组的指针。我有一个循环,在这个循环中,
char**
需要备份到结构向量。因此结构中有一个变量类型char**。
不幸的是,对于这篇文章,我必须使用
char**
类型。我无法使用
char*vName[]
类型

我的问题是:
我目前面临的问题是,当我添加一个新结构时,
char**
指向所有结构中可用的最新数据,而不是最近的数据

我所尝试的:
我尝试过使用strcpy、memcpy和普通的旧值,但它们似乎不起作用。我尝试过使用
newItem.storedVars[I]=newVars
,但这似乎也不起作用

如何获取或复制新
char**
数组中的数据,并将其存储到结构中,而不被循环再次修改

#include <iostream>
#include <string>
#include <vector>

using namespace std;

struct StringHolder{
    char** storedVars;                              //stored char** variable
};

int main(int argc, char *argv[]){
    char** newVars;                                 //stores current char** values
    int counter = 100;                              //counter
    vector<StringHolder> vectorOfStructs;

    while(counter!=0){                              //while counter is going downward
        StringHolder newItem;                       //create a new string
        char** storedVarsToAdd;                     //stored variables that I will be adding

        newVars = externalVarsFetcher();            //get the new char** variable from the external function

        storedVarsToAdd = newVars;                  //this statement doesn't work

        //neither does this statement
        for(int i = 0; i < 10; i++){
            storedVarsToAdd[i] = newVars[i];
        }
        newItem.storedVars = storedVarsToAdd;       //take the new item I created, update it's char** value with a new one
        vectorOfStructs.push_back(newItem);         //push the struct onto the vector
        counter--;                                  //continue through the array
    }
}
#包括
#包括
#包括
使用名称空间std;
StringHolder结构{
char**storedVars;//存储的char**变量
};
int main(int argc,char*argv[]){
char**newVars;//存储当前char**值
int计数器=100;//计数器
结构向量;
while(counter!=0){//计数器向下运行时
StringHolder newItem;//创建一个新字符串
char**storedVarsToAdd;//我将要添加的存储变量
newVars=externalVarsFetcher();//从外部函数获取新的char**变量
storedVarsToAdd=newVars;//此语句无效
//这句话也没有
对于(int i=0;i<10;i++){
storedVarsToAdd[i]=新变量[i];
}
newItem.storedVars=storedVarsToAdd;//获取我创建的新项,用新项更新其char**值
vectorOfStructs.push_back(newItem);//将结构推到向量上
计数器--;//继续遍历数组
}
}

以下是如何存储命令行参数,这与您尝试执行的操作相同:

std::vector<std::string> args;
for (int i=0; i<argc; i++)
   args.push_back(argv[i]);
std::vector args;

对于(int i=0;i,以下是如何存储命令行参数,这与您尝试执行的操作相同:

std::vector<std::string> args;
for (int i=0; i<argc; i++)
   args.push_back(argv[i]);
std::vector args;

对于(int i=0;i您的问题是您只是在处理指针,而不是在复制字符串。您应该使用
std::string
,但这听起来像是家庭作业,所以可能会被告知不要这样做。如果不是这样,请使用
std::string

如果必须使用
char**
等:

for(int i = 0; i < 10; i++){
    storedVarsToAdd[i] = strdup(newVars[i]);
}
for(int i=0;i<10;i++){
storedVarsToAdd[i]=strdup(newVars[i]);
}
strdup
将为您分配内存并复制字符串


现在您有一个潜在的内存泄漏,但这是另一个问题(提示-使用
std::string
).

您的问题是,您只是在处理指针,而不是复制字符串。您应该使用
std::string
,但这听起来像是家庭作业,因此可能会被告知不要这样做。如果不是这样,请使用
std::string

如果必须使用
char**
等:

for(int i = 0; i < 10; i++){
    storedVarsToAdd[i] = strdup(newVars[i]);
}
for(int i=0;i<10;i++){
storedVarsToAdd[i]=strdup(newVars[i]);
}
strdup
将为您分配内存并复制字符串


现在您有一个潜在的内存泄漏,但这是另一个问题(提示-使用
std::string
).

这句话不起作用是什么意思?你的意思是它不编译,或者它没有达到你的预期,或者你的应用程序崩溃你只是在复制指针……想想storedVarsToRead和storedVarsToRead的类型[i].你甚至没有给我分配内存storedVarsToRead@pm100对不起,我的意思是,第一条注释只是显示最新的数据,而不是我想要的副本表示我收到一个分段错误。“此语句不起作用”是什么意思?你是说它不编译,或者它没有达到你预期的效果,或者你的应用程序崩溃你只是在复制指针……想想storedVarsToRead和storedVarsToRead[I]的类型.你甚至没有给我分配内存storedVarsToRead@pm100对不起,我的意思是,第一条注释只是显示最新的数据,而不是我想要的副本表示我收到分割错误。当然,但是CS的“老师”喜欢说“不要使用功能,x,y,z”。注意,他说他不允许使用字符*[]你是正确的,因为这是“家庭作业”在某种意义上说,它是一个在线课程。我必须使用char **,但是我会尝试使用GrutUp。杂耍指针听起来完全是我正在做的。我尝试过,但是它似乎只复制垃圾而不是字符串。你还需要为StaveValStAdDad分配内存,因为其他人都是SAIS——这不是好的C++,你被淹没在C++反模式中。当然,但是CS的“老师”喜欢说“不要使用feature,x,y,z”。注意,他说他不允许使用char*[]你是对的,因为这是“家庭作业”在某种意义上说,它是一个在线课程。我必须使用char **,但是我会尝试使用GrutUp。杂耍指针听起来完全是我正在做的。我尝试过,但是它似乎只复制垃圾而不是字符串。你还需要为StaveValStAdDad分配内存,因为其他人都是SAIS——这不是好的C++,你被淹没在C++反模式中。s