簡體   English   中英

提取部分std :: vector <char> 到一個const char *?

[英]Extract part of a std::vector<char> to a const 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'周圍的堆棧已損壞。

std :: vector保證順序存儲其所有元素,因此&vec [i]應該可以工作。 但這並不意味着指針將以零結尾。 您需要一個零終止字符串來與atoi或atol一起使用。

最安全的方法是將其復制到std :: string

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

現在使用tmp.c_str(),可以確保此代碼以零結尾。

在你的代碼中

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

結果導致未定義的行為,因為從c_str()返回的指針是臨時的。

嘗試這個:

p = atol( tmp.c_str());
memcpy( &p, &My_Vector[25], 8);

要么

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

始終假設字節順序正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM