質問

関数を備えたアプリを書いたように main(int argc, char * argv[])

アプリケーションを起動するとき、私は次のようないくつかのパラメーターを送信したいです(アプリ名があると仮定します ffdisk)

>ffdisk -f 111123123131321312312123 1

あなたは3番目のパラマが私の当初の意図でint64 paramかもしれません...
しかし、関数Mainでは、Argv [2]は文字列ポインターです。この文字列をint64変数に変換するにはどうすればよいですか?

ありがとう...
私はいつも厄介な問題に固執しています。

役に立ちましたか?

解決

Stdlib.hで_atoi64、_strtoi64関数を使用できます

他のヒント

複数の方法があり、Argc/Argv解析ライブラリを使用するか、SSCANFまたはATOLライブラリ機能を手動で使用します。

#include <stdlib.h>

int main(int argc, char** argv) {
     second_parm_as_long_long = atoll(argv[2]);
     return 0;
}

WindowsとLinuxをターゲットにしているため、両方のシステムに存在する機能の範囲内に留まることができます。それは、平易な標準C89を意味します。

しかし、プレーン標準C89では、64ビット整数タイプを提供するための実装を必要としません。とにかく、あなたは立ち往生しています。

ニーズに十分な大きさのタイプ(実装依存)があると仮定すると、番号を作成できます 少し 数字による数字...

value = 0; /* value is of the large enough type */
char *p = argv[2];
while (*p) {
    value *= 10;
    value += *p - '0';
    p++;
}
/* if argv[2] was "111123123131321312312123"
 * and the type is large enough,
 * value now has 111123123131321312312123 */

Linuxの場合、GNU Cライブラリにはあります getopt. 。 Windowsについては、見ることができます xgetopt

または、ご覧ください ArgTable (しかし、私はそれを使用する機会がありませんでした)

また、C ++で:

boost.program_optionSを使用すると、プログラム開発者は、コマンドラインや構成ファイルなどの従来の方法を介して、ユーザーからの(名前、値)ペアであるプログラムオプションを取得できます。

また

gflags パッケージには、コマンドラインフラグの処理を実装するライブラリが含まれています。そのため、getopt()の代替品です。文字列などのC ++タイプの組み込みサポートや、使用されているソースファイルのフラグを定義する機能など、柔軟性が向上しています。

選ぶだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top