将std :: vector <char>的一部分提取到const char *?</char>

时间:2013-11-28 19:24:58

标签: c++ vector char

最简单的方法是提取vector<char>的一部分(假设我知道指数)最终得到const char*?我需要这样做才能将const char *传递给atoi()atol()

编辑:

    long pp;
    int qq;
    memcpy( &pp, &My_Vector[25], 8);
    memcpy( &qq, &My_Vector[19], 4);

    q= qq;
    p= static_cast<double>(pp)/1E8;

但是,当函数完成时:

  

运行时检查失败#2 - 围绕变量'pp.51040'进行堆叠   损坏。

3 个答案:

答案 0 :(得分:3)

std :: vector保证按顺序存储其所有元素,因此&amp; vec [i]应该可以工作。但这并不意味着指针将被终止。您需要一个以零结尾的字符串与atoi或atol一起使用。

最安全的方法是将其复制到std :: string

std::string tmp(&vec[i], 9); // if substring is 9 characters long

现在使用tmp.c_str(),保证零终止。

答案 1 :(得分:1)

在您的代码中

const char* c = tmp.c_str();
p = atol(c);

结果是未定义的行为,因为从c_str()返回的指针是临时的。

试试这个:

p = atol( tmp.c_str());

答案 2 :(得分:1)

memcpy( &p, &My_Vector[25], 8);

p = * ((long *) &My_Vector[25]);

始终假设字节顺序正确。