2010-11-24 7 views
15

私は、char *変数があります。私はそれははstd ::するベクトルを変換することができますどのようchar *をstd :: vectorに変換するには?

// char* buffer; 
// ... 
fread (buffer, 1, lSize, pFile); 
// ... 

を?キャストするとエラーが表示されます。

答えて

18

なぜそもそもstd::vectorを使用しない:

std::vector<char> buffer(lSize); 
std::fread(&buffer[0], 1, buffer.size(), pFile); 
46
std::vector<char> data(buffer, buffer + size); 

ジェームズMcNellisの答えは、あなたがそのようにそれを行うことができれば良いです。

+11

、これが正しい答えです質問に。場合によっては、最初にchar *を使用することもあります。 – enobayram

3

char *とvectorの間でキャストすることはできません。ポインタのキャストは、結果が入力とまったく同じバイトを持つようにするので、低レベルのビット操作をしない限り、一般的には悪い考えです。

文字のベクトルを作成すると仮定すると、タイプstd::vector<char>の新しいベクトルオブジェクトを作成できます(ベクトルの要素の型を指定する必要があることに注意してください)。コンストラクタにエンドポインタ:2番目の引数はC++で非常に一般的な「エンド・ポインタ」、であることを

std::vector<char> vec(buffer, buffer+lSize); 

注意。重要なのは、の後のの後のバッファへのポインタであり、バッファの最後の文字ではありません。つまり、開始は包括的ですが、終了は排他的です。

もう1つの可能性(文字を扱っているため)では、代わりにstd::stringを使用します。これは、文字列やバイト配列としてchar *を考えているかどうかによって、あなたが望むものであってもなくてもかまいません。あなたは、同じ方法でそれを構築することができます。

std::string str(buffer, buffer+lSize); 

または異なるコンストラクタで、2番目の引数としてのサイズを取る:ジェームズの答えは、より良いコードを奨励していても

std::string str(buffer, lSize); 
関連する問題