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



我正在尝试将 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));

最新更新