我正在尝试将 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
}
但是我得到了分段错误..知道为什么吗?
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));