0

C++ で C スタイルの文字列を処理するのに問題があります。要するに、私がやろうとしているのは、メイン メソッドからオブジェクトの 1 つのコンストラクターに cstring を渡すことです。

例えば

class sample
{
  public: // Initalization
  Sample( const char * inFile);
}//End sample class

次に、メインメソッドで。

//Main method
int main ( int argc, const char * argv[] )
{
   Sample aSample(argv[1]);
}

さて、私の仮定に基づいて、 をconst char*使用して 2 番目のポインターを逆参照すると、 a が返されるはずargv[1]です。私の理解char *argv[]では、 char の別の言い方です**argv

また、const の私の理解が正しいことを確認するために、const char *「このポインターは const char を指している」const char const *と言っていますが、「このポインターのアドレスは変更できず、それが指すアドレスも const です」と言っています。

アップデート -

これを明確にするために、2つの部分からなる質問です。

  1. サンプルのコンストラクターが cstring を渡すのに正しくない場合、どうすれば修正できますか?
  2. constの理解

「最初の」ポインターが「2 番目の」ポインターであるべきなのに逆参照したという上記の誤ったステートメントを更新しました。以下、ご指摘ありがとうございます。

2 回目の更新 - argv[1] を使用しているのは、コマンド ラインから情報を受け取っており、argv[0] には興味のない実行可能ファイルのパスしか含まれていないためです。

どんな助けでも大歓迎です。

-フレディ

4

1 に答える 1

3

argv[1]最初のポインターではなく、2 番目のポインターを逆参照します。あなたがしたいargv[0]。C++ の配列は0 ベースです。

また:

const char const *

合法ではありません (指摘してくれた Benjamin の功績によるものです)。この場合、両方constの が に適用されます。charポインターを const にしたい場合は、

char const * const

また

const char * const

編集:

char*質問 1) CStringはコンストラクターの as パラメーターを取ることができるため、機能するはずです。

質問 2)constは、左側に何もない場合を除き、左側にバインドされます。だからconst charchar constは同じです。const ポインターの場合* const、 ではなくが必要const *です。

于 2012-05-06T15:21:02.777 に答える