我正在尝试将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
}
但我得到分段错误..任何想法为什么?
答案 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));