[解決済み] char**の初期化
質問
私はC++の超初心者です。char**を取り込む関数を呼び出そうとしています。
bool func(char** a) {
//blablabla
}
つまり、c-stringの配列を取り込んでいるわけです。char**を作成する必要があるのですが、何も動作しません。
char** a = char[255][255]; // error: type name is not allowed
char** a = new char[255][255]; // error: a value of type "char (*)[255]" cannot be used to initialize an entity of type "char **"
char a[][] = {"banana", "apple"};
char** b = &a; // error: a value of type "<error-type> (*)[2]" cannot be used to initialize an entity of type "char **"
最後に必要なのは
char* a[] = {"banana", "apple"};
なぜ、最初の数本はうまくいかず、最後の1本はうまくいったのか?
よろしくお願いします。
どのように解決するのですか?
あなたのコードには多くの間違いがあります。
char** a = char[255][255]; // error: type name is not allowed
まず第一にこれは有効なC++(あるいはC)ですらありません。たぶん、あなたはこう言いたかったのでしょう。
char a[255][255];
いずれにせよ,動的に割り当てられる2次元配列の型は,以下のようなものではないことを常に念頭に置いてください.
**
しかし
(*)[N]
というのは、かなり違いますね。
char** a = new char[255][255]; // error: a value of type "char (*)[255]" cannot be used to initialize an entity of type "char **"
コメントにあるエラーメッセージは、私が先ほど言ったことをそのまま説明しています。
char a[][] = {"banana", "apple"};
上記のコードでは、変数の正しい型は
a
は、次のようになります。
char* a[]
. 繰り返しますが、配列とポインタは(型が関係しているため)非常に異なるものです。A
char
配列はポインタに崩壊する可能性があります(もし
NULL
しかし、それ以外では、明示的なキャストを除いて、ポインタと配列の使い分けはできません。
最後のは、さっき言ったように、うまくいったから。
char* []
は、C文字列の配列として正しい型です。
いずれにせよ、宿題にするくらいなら、こんなこと覚えてもいいんじゃないでしょうか。でも、今後C++を使った開発をするときは、なるべく
C-
C-string、C-arrayなどのような。C++の標準ライブラリでは
std::string
,
std::array
,
std::vector
といった
無償で
.
もし、あなたが
本当に
で)ダイナミックメモリを割り当てる必要があります。
new
と
delete
または
new[]
と
delete[]
を使用してください。
スマートポインタ
のように
std::shared_ptr
または
std::unique_ptr
.
関連
-
[解決済み】構造体のベクター初期化について
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み] std::string を const char* または char* に変換する方法
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み】文字列の中にある文字列(実際はchar)の出現回数を数えるには?
-
[解決済み】NULL終端文字列の根拠は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】構造体のベクター初期化について
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】'cout'は型名ではない
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】C++の余分な資格エラー
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の