1

関数付きのアプリを書いたのでmain(int argc, char * argv[])

アプリケーションを起動するときに、次のようなパラメータを送信したいと思います(アプリ名はffdisk

>ffdisk -f 111123123131321312312123 1

3番目のパラメータは私の当初の意図ではおそらくint64パラメータであることがわかります...
しかし、関数mainでは、argv [2]は文字列ポインタです。この文字列をint64変数に変換するにはどうすればよいですか?

ありがとう...
私はいつも厄介な問題で立ち往生しています...

4

5 に答える 5

2

複数の方法があります。いくつかのargc/argv解析ライブラリを使用するか、手動でsscanfまたはatolライブラリ関数を使用します。

于 2009-12-09T10:05:18.893 に答える
2

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

于 2009-12-09T10:09:21.400 に答える
2
#include <stdlib.h>

int main(int argc, char** argv) {
     second_parm_as_long_long = atoll(argv[2]);
     return 0;
}
于 2009-12-09T10:45:24.960 に答える
1

Windows と Linux をターゲットにしているため、両方のシステムに存在する機能を十分に活用したい場合があります。つまり、プレーンな標準 C89 です。

しかし、単純な標準 C89 では、実装で 64 ビット整数型を提供する必要はありません。とにかく、あなたは立ち往生しています。

必要に応じて十分な大きさのタイプ(実装に依存)があると仮定すると、数字を1桁ずつ作成できます...

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 */
于 2009-12-09T11:14:37.390 に答える
0

Linux の場合、GNU C ライブラリにはgetoptがあります。Windows の場合、 XGetoptを見ることができます。

または、 argtableを見ることもできます(しかし、私はそれを使用する機会がありませんでした)。

C++ の場合:

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

また

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

1つだけ選んでください。

于 2009-12-09T10:10:47.403 に答える