我正在尝试创建一个读取单个.txt文件的程序。问题是我熟悉使用
这样做的唯一方法int main ( int argc, char *argv[] ).
但是,我的所有输入始终只接受一个文件,所以我觉得每次运行程序时用户都指定argc = 2是多余的。有没有办法让C ++隐含地知道只有一个命令行参数?
答案 0 :(得分:3)
argc
变量包含所调用程序的实际参数数。输入main
功能时会自动设置。你不能说这个号码是什么,也不能由运行该程序的用户手动设置。
如果你想让你的程序只运行特定数量的参数(在你的情况下是一个参数),你必须执行检查main
函数:
if (argc != 2)
{
std::cerr << "Invalid number of arguments" << std::endl;
return 1;
}
答案 1 :(得分:2)
除了other answer by ips之外,您应该记住,C99(或C11)标准语言的任何托管环境都会为int argc
和char**argv
提供main
和main
{1}}以特定于实现的方式。
在DOS和Windows上,据传操作系统的命令行界面正在将命令行解析为execve
的参数。
在POSIX系统和Linux上,指定每个程序从POSIX exec functions开始,用于Linux转换为execve(2)系统调用。在这样的系统上,shell正在将命令扩展为参数数组 - main
- 所以可以做一些globbing:见glob(7)。但是程序从一个包含(特别是)argc
的参数的初始堆栈开始。详细信息为ABI,对于Linux on x86-64,请阅读x86-64 ABI spec。
我们保证argc
是> 0,argv
的所有argv[argc]
个元素都是以空字符结尾的字符串而不是指针别名,NULL
是argc==2
指针。因此,如果您只想要一个程序参数,那么您应该测试argv[argc]
,并且应该使用argc
作为程序参数。
在实践中,您应该始终测试argv
和--help
。 GNU glibc提供了两种解析program arguments的方法:通常的getopt和argp。
GNU coding standard指定每个程序至少应接受--version
和-
程序参数。我讨厌不遵守该规则的节目,所以请关注它......
argv
开头的选项)作为文件路径处理,所以你的程序应该循环{{1}}数组的组件(排在第0位之后,通常是程序名)。