当我编写一个具有该功能的应用程序时main(int argc, char * argv[])
当我启动应用程序时,我想发送一些参数,例如(假设应用程序名称是ffdisk
)
>ffdisk -f 111123123131321312312123 1
您看到第三个参数可能是我的初衷中的 int64 参数...
但是在函数 main 中,argv[2] 是字符串指针,那么如何将这个字符串转换为 int64 变量?
谢谢...
我总是陷入混乱的问题....
当我编写一个具有该功能的应用程序时main(int argc, char * argv[])
当我启动应用程序时,我想发送一些参数,例如(假设应用程序名称是ffdisk
)
>ffdisk -f 111123123131321312312123 1
您看到第三个参数可能是我的初衷中的 int64 参数...
但是在函数 main 中,argv[2] 是字符串指针,那么如何将这个字符串转换为 int64 变量?
谢谢...
我总是陷入混乱的问题....
有多种方法,使用一些 argc/argv 解析库,或者手动使用 sscanf 或 atol 库函数。
您可以在 stdlib.h 中使用 _atoi64、_strtoi64 函数
#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_option允许程序开发人员通过命令行和配置文件等常规方法从用户那里获取程序选项,即(名称,值)对。
或者
gflags包包含一个实现命令行标志处理的库。因此,它是 getopt() 的替代品。它增加了灵活性,包括对字符串等 C++ 类型的内置支持,以及在使用它们的源文件中定义标志的能力。
随便挑一个。