将argv复制到新的全局矢量字符串

时间:2018-01-06 21:55:14

标签: c++ vector

我正在尝试将argv复制到一个新的字符串向量,我希望它是全局的,所以我可以在另一个函数中使用它:

这里我使用这一行来复制argv:std::vector<std::string> args( argv, argv + argc );

std::vector< std::string> args; //global

int main(int argc, char *argv[]){
    if(argc <2 ||argc-2 != atoi(argv[1])){
        cout << "illegal arguments" << endl;
        return -1;
    }

    std::vector<std::string> args( argv, argv + argc ); // copying here
// some more code in the main (works fine)

}

这里我正在使用它(同一文件中的另一个函数):

void* ATM_Threads(void* atm_id){
    int* id=(int*) atm_id;
    stringstream buff;
    //buff <<"ATM_"<<*id<<"_input_file.txt"; // using this line instead of the next one works just fine
    buff<<args[*id+1]; //here i'm using the vector which gives me core dumped SF
    }

但我得到分段错误..任何想法为什么?

1 个答案:

答案 0 :(得分:2)

std::vector<std::string> args( argv, argv + argc ); // copying here

这不会将任何内容复制到全局声明的args。这定义了一个隐藏全局args的本地自动变量args。全局args仍为空。因此args[*id+1]将超出全局args的范围。

  

任何想法如何将其复制到全局数组或向量?

您可以使用insert成员函数将元素插入到矢量中:

args.insert(args.end(), argv, argv + argc);

std::copy

std::copy(argv, argv + argc, std::back_inserter(args));