5
const int sizea = 600; 
char sz[sizea];

上記のコードは正常に動作します。ただし、コード セグメントの下ではエラーが発生します。Visual Studio 2005 - MFC アプリケーションに取り組んでいます

CString strFinal;

.......//strFinal value is dynamically changing . . 

const int size = strFinal.GetLength();
char sz[size];

エラー 2 エラー C2057: 定数式
が必要です エラー 5 エラー C2070: 'char []': オペランドのサイズが不正
です エラー 4 エラー C2133: 'sz' : サイズが不明です エラー 3 エラー C2466: 定数サイズ 0 の配列を割り当てることはできません

4

5 に答える 5

4

C++ の現在のバージョンでは、配列はコンパイル時の定数で指定された固定サイズでなければなりません。ランタイム値を使用する必要がある場合のオプションは次のとおりです。

  • std::string最も移植性が高いのは、またはなどの動的配列クラスを使用することstd::vector<char>です。
  • 非標準拡張として C99 可変長配列をサポートするコンパイラを使用します。
  • 動的配列が C++14 に (できれば) 導入されるまで 1 年待ちます (おそらく、コンパイラ ベンダーが追いつくまでもう少し待ちます)。
于 2013-08-26T13:01:10.583 に答える
-1

GetLength()静的に定義されていない任意の値を返すため、エラーが発生します。

適切な方法は、文字列を保持するのに十分なメモリを割り当てることです。また、必要に応じて、演算子をNULL呼び出すmallocか、演算子を使用してnew(C++ コンパイラでコンパイルする場合)、終了シンボルを保持します。

于 2013-08-26T12:57:29.910 に答える