1

コマンド ライン パラメータを解析しようとすると、奇妙なエラーが発生します。なぜ私はそれを奇妙と呼ぶのですか?それは、私が事前に C++ でのコマンド ライン解析について多くの調査を行ったことが原因であり、Visual Studio 2010 IDE で動作するテスト コードはありません。デバッガーを使用すると、パラメーターを確認しようとすると、常に FALSE が返されます。以下の例では、if (argv[1] == "-in") を実行したときです。ウォッチウィンドウでいくつかの異なる方法でテストしてみました。そして、最初に文字列に渡してみました。または一重引用符を使用します。それから私はインターネットを検索し、おそらくそれを機能させたと思われる他の人のコードを使用しました。私は何を間違っていますか?Visual Studio 環境で間違って設定した設定ですか?

もともと持ってたのはこれ

#include <iostream>
#include <stdlib.h>
#include <sstream>
#include <fstream>

using namespace std;





int main(int argc, char * argv []) //Usage FileSplitter -in [filename] -sz [chunk size]
{

if (argc==5)
    {
    string strTest = argv[1];
    if ((argv[1] == "-in") && (argv[3] == "-sz"))
                 {
                        //Code here
                 }
    }
}

とにかく、それは私の元のコードでした。何度か微調整を試み、次のウェブサイトのコードを使用してみました...

http://www.cplusplus.com/forum/articles/13355/ 彼は argv[1] を文字列と比較するいくつかの例を持っています...そして彼はそれがうまくいくと言っています。

http://www.cplusplus.com/forum/unices/26858/ また、ある人が比較に関するコードを投稿しました. Ryan Caywood の投稿の下。

比較しようとすると、うまくいきません。正当な strcmp を実行することだけを考えていますが、私のビジュアル スタジオ環境が他のシステムのようにコンパイルされない理由を知りたいですか?

また、デバッグ中に、プロジェクト プロパティのデバッグ セクションにコマンド ライン パラメーターを入力します。それが何かに影響したかどうかはわかりません。また、プロジェクトをビルドして実行しようとしましたが、残念ながらすべて役に立ちませんでした。良いアドバイスをくれる人に事前に感謝します。

4

2 に答える 2

2

引数は C 文字列を介して渡されるため、私の記憶が正しければ、== を使用してそれらを比較すると、それらへのポインターが比較されるだけです。必要に応じて、strcmp() を使用して 2 つの C 文字列を比較するか、両方を C++ 文字列に変換して比較してみてください。

于 2012-05-21T01:43:33.370 に答える
1

文字列の比較が間違っています。

Cスタイルを使用するstrcmp()か、(あなたが言及したリンクで提案されているように)最初にC++スタイルに変換しますstring

if (string(argv[i]) == "stuff") { ... }
于 2012-07-25T12:47:33.490 に答える