簡體   English   中英

復制向量 <char> 變成char *

[英]Copy vector<char> into char*

我只是在學習C和C ++編程。

我已經搜索過,但似乎找不到答案不錯的答案。 當然,使用<string>要容易得多,但是對於此任務,我僅需要使用clib <string.h>函數; 我也不允許使用C ++ 11函數。

我下面有2個變量,並想將buffer的內容移入c

vector<char> buffer;
char* c = "";

我如何輕松做到這一點?


到目前為止,我已經知道了,但是顯然不起作用,否則我就不會在這里。

for (int b = 0; b < buffer.size(); b++)
{
    c += &buffer[b];
}

我能想到的最簡單的方法是:

 std::vector<char> buffer;
   // some code that places data into buffer
 char *c = new char[buffer.size()];
 std::copy(buffer.begin(), buffer.end(), c);
    // use c
 delete [] c;

std::copy()在標准頭文件<algorithm>可用。

假設將數據顯式放入buffer的代碼負責將任何值為零( '\\0' )的尾隨字符插入緩沖區。 否則, c后續用法將不能假定存在'\\0'終止符。

如果你想確保尾隨'\\0'出現在c即使buffer不包含一個,再一個辦法是;

 std::vector<char> buffer;
   // some code that places data into buffer
 char *c = new char[buffer.size() + 1];    // additional room for a trailing '\0'
 std::copy(buffer.begin(), buffer.end(), c);
 c[buffer.size()] = '\0';
    // use c
 delete [] c;

一個人也可以偷偷摸摸,使用另一種媒介。

 std::vector<char> container;
   // some code that places data into buffer
 std::vector<char> v(container);   // v is a copy of container
 v.push_back('\0');    // if we need to ensure a trailing '\0'
 char *c = &v[0]

    // use c like a normal array of char

只要使用c的代碼不執行任何可調整v大小的操作,則在這種情況下c的用法與前面的示例完全相同。 這樣做的好處是v超出范圍時將被釋放(無需記住delete任何內容),但潛在的缺點是c在該點之后不能再使用(因為它將是一個懸空的指針)。

首先,通過分配c = new char[buffer.size()];為數據分配空間c = new char[buffer.size()];

然后使用memcpy復制數據: memcpy(c, buffer.data(), buffer.size())

您的for循環也可以代替memcpy起作用。

還要注意,如果在使用char*vector<char>始終保持在原位,並且允許您更改vector的內容,則可以通過簡單的分配簡單地使用vector后面的數據,如下所示:

char *c = buffer.data();

當我創建給定大小的char *時,我注意到一些怪異的行為,即它使我的單詞后面帶有一些隨機的"hereýýýý««««««««"值而使它變大

看來您確實需要一個以N結尾的C字符串。 在這種情況下,您需要在末尾分配一個額外的字符,並將其設置為零:

char *c = new char[buffer.size()+1];
memcpy(c, buffer.data(), buffer.size());
c[buffer.size()] = 0;

您可以通過以下方式進行操作:

vector<char> buffer;
//I am assuming that buffer has some data
char *c = new char[buffer.size()+1];

for( int i=0; i<buffer.size(); i++ )
   c[i] = buffer[i];
c[i] = '\0';

buffer.clear();

暫無
暫無

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

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