2017-04-26 6 views
0

私は今学校でサーバーアプリケーションを開発中です。現在、私は4つの別個のconst char *に読み込むべきcommandLine項目を打ち破ろうとしています。コマンドラインを別のconst char *に区切ります*

 int state = 0; 
     char *token = std::strtok(commandLine, " "); 
     while(token != NULL) 
      { 
        switch(state) 
        { 
          case 0: c = token; break; 
          case 1: u = token; break;       
          case 2: p = token;break;       
          case 3: a = token; break;    
        } 
        token = std::strtok(NULL, " "); 
        state++; 
      } 

    const char* command = c.c_str(); 
    const char* user = u.c_str(); 
    const char* password = p.c_str(); 
    const char* args = a.c_str(); 

これはあまりよく最適化されていないことを認識しています。私が試してきたことがすべてseg faultsを引き起こしたので、私はさまざまな解決策をたくさん試してきました。ご協力ありがとうございました!

+0

コマンドラインの解析は解決された問題です:http://www.boost.org/doc/libs/1_64_0/doc/html/program_options.html –

+0

申し訳ありませんが、このプロジェクトでは、私はブーストを使用することはできません。さもなければ、これはより簡単になります。 –

+0

ようこそスタックオーバーフローへ。 [The Tour](http://stackoverflow.com/tour)にアクセスして、[Help Center](http://stackoverflow.com/help/asking)の内容を参照してください。どのようにここで尋ねることができます。 [mcve]を投稿することは特に重要です。 –

答えて

0

これは質問です^ _ ^!私は自分のコンピュータでこのコードを実行してみてください、と私はこのようなコマンドラインを定義するとき、私は同じ問題を抱えていた:

char* commandLine = "abc def ghi jkl"; 

理由は、ソースコードの一部が文字列のコマンドラインを変更します関数はstrtokです:

for (; *str ; str++) 
      if (map[*str >> 3] & (1 << (*str & 7))) { 
        *str++ = '\0'; 
        break; 
      } 

ので、私は私の定義変更した場合:問題はあなたにuserful gone.wishある

char commandLine[] = "abc def ghi jkl"; 

、ありがとう〜

関連する問題