最简单的方法是提取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'进行堆叠 损坏。
答案 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]);
始终假设字节顺序正确。