char*
からint
にキャストすると、ポインタ値bitpatternが整数として解釈されます。
代わりに、整数の指定として指される文字列を解釈する良い方法は、<string>
ヘッダーのstd::stoi
を使用することです。
したがって:引数は整数の有効な指定ではない場合の
#include <iostream>
#include <stdlib.h> // EXIT_FAILURE
#include <string> // std::stoi
using namespace std;
int main(int argc, char *argv[])
{
if(argc != 2)
{
return EXIT_FAILURE;
}
cout << "ARGV[1]: " << stoi(argv[1]) << "\n";
}
、stoi
は、例外がスローされ、その上のコードにいくつかのメッセージを表示して終了するプログラムの原因となります–がクラッシュしました。これは一般的に間違った結果を出すのに適しています。しかし、それを処理したい場合は、C++の教科書でtry
とcatch
を読んでください。
あなたは、コマンドライン引数としてファイル名、より一般的にはファイルシステムのパスをしたい場合は、char
基づいて文字列のエンコーディングのためのWindowsの規則は文字の非常に限られたセットを持つWindows ANSI、あることに注意してください。私のノルウェーのコンピュータのいくつかのファイル名とパスは、あなたのWindows ANSIで表現することはできません(Windows ANSIはロケール固有です)。だからこそCとC++のmain
引数のメカニズムはうまくいきません。
のWindows APIは、(作業)の代替として使用することができるwchar_t
基づく関数の組を提供し、すなわち及びCommandLineToArgvW
(個々の引数を生産するための標準解析)(生UTF-16でエンコードされたコマンドラインを取得します)。
Windowsコンパイラの中には、標準main
の代わりにwmain
と呼ばれるものもあります。argv
はwchar_t* argv[]
と宣言されています。これらのコンパイラには、Visual C++とg ++のMinGW64版が含まれています。
なぜ即時downvote?これは私にとって非常に明確なカットではなく、私は正確な質問を見つけることができませんでした。 – JDS
'char *'ポインタから単に 'int'にキャストすることはできません。 –
「int」を正しく取得する方法を教えてもらえますか?私はC/C++で非常に錆びています。 – JDS