2

重複の可能性:
C++ の _tmain() と main() の違いは何ですか?

コマンド ライン パラメータを 1 つ取るコンソール アプリケーションがあります。

int _tmain(int argc, char* argv[])
{
    ...
    printf("Path: %s\n", argv[1]);
        ...
}

myprogram.exe D:\myfolder\myfile引数 ( ) を指定してプログラムを実行すると、 のPath: D代わりに出力されPath: D:\myfolder\myfileます。

argv[1]最初のコマンド ライン パラメータ ( ) を抽出する手順を変更して、最初の文字だけでなくフル パスを返すにはどうすればよいですか?

パスを引用符 ( myprogram.exe "D:\myfolder\myfile") で囲みましたが、役に立ちませんでした。

4

3 に答える 3

6

_tprintfの代わりに使用しprintfます。あなたのプログラムはほぼ確実に as でコンパイルするように設定されているUNICODEため、各「文字」は 2 バイトを使用します。

printfシングルバイト文字で動作する を呼び出します。2 番目のバイトはたまたま 0 でありprintf、ゼロ バイトは文字列の終端と見なされるため、文字列の最後に達したと考えます。

そして、 yourがand notargvとして宣言されていることを確認してください。一貫性を保つ:ルーチンを使用するか、使用しないかのいずれかです。ただし、よほどの理由がない限り、ミックスしないでください(つまり、自分が何をしているのかを知っていて、マジックを行う準備をしているなど)。あなたはそうしない可能性があり、そうすべきではありません。TCHARcharTCHAR

于 2012-10-24T11:04:25.693 に答える
2

Visual Studio C++ には、Unicode サポートを処理する特別な方法があります。tchar.hのマクロは、プロジェクトの設定に応じて、シンボルの通常またはワイド char バージョンに展開されます。したがって、または_tprintfに展開されます。を使用しようとしているようです。プロジェクト設定で Unicode サポートが有効になっている場合は、まさに問題が発生しています。tchar.h を見て、代わりに使用してみてください。printfwprintfprintf_tprintf

于 2012-10-24T11:06:37.307 に答える
0

Visual Studio では、通常、main 関数は wchar 型の引数を受け取ります。その場合は、 wprintf 関数を介して次のように出力してみてください。

wprintf("Path : %S", argv[1]);

大文字の「S」に注意してください。これを小文字の「s」に置き換えると、最初の文字のみが出力されます。それがワイド文字の仕組みです。詳細については、msdn フォーラムを参照してください。

于 2012-10-24T11:06:02.107 に答える