2017-08-08 13 views
-5

非定常サイズの初期化中にC++のchar配列が必要です。サイズは関数から生成され、ベクトルには使用できないので定数でなくてはなりません。このchar配列はファイルの読み書きに使用されます。例:初期化中にサイズが一定でない文字配列

int i = functionToGetvalue(); 
unsigned char ch[i]; 
file1 >> ch; 
file2 << ch; 
+0

あなたはそれを行うことはできません。あなたの元の例で

std::vector<char> vec; vec.resize(255); ssize_t sz = read(fd, vec.data(), vec.size()); 

、あなたがフォーマットされたストリームのI/O、およびこのような場合には、std::stringは最適なツールを使用していますそうですね。あなたは 'new'を使う必要があります(そして、あなたのdoneを削除することを忘れないでください) – litelite

+5

"この文字配列はファイルへの読み書きに使われます。あなたはベクトルや文字列でそれを行うことができます。 –

+0

'functionToGetvalue'は何をしますか?あなたは 'constexpr'をマークすることができます。 – Rakete1111

答えて

5

前提が間違っています。ベクトルよりもCスタイルの配列(またはstd::array)を好む理由はありますが、あなたは確かにそうではありません。メモリに連続していることが保証されているので、確かにstd::vectorを使用してファイルの読み書きを行うことができます。

例:

std::string str; 
file1 >> str; // reads up to the next white space into str 
+0

特定の位置にあるファイルの特定の部分をロードする必要があるために役立たない。 2番目の部分はスペースを含むことができるので、スペースで終わることはできません。 –

+3

@DavidHusička、あなたはCスタイルの配列を必要とするものは、データの読み込みに関するベクトルで行うことができます。実際のコードをCスタイルの配列でポストして、ベクトルでそれを行う方法を示します。 – SergeyA

+0

@ NathanOliver、私は 'std :: unique_ptr <[]>'が 'vector'を上回る何らかの利点を持っていることをまだ見ていません。 – SergeyA

関連する問題