如何在不指定argc的情况下在C++中读取单个.txt文件作为输入
How to read a single .txt file as input in C++ without specifying argc
我正在尝试创建一个在单个.txt文件中读取的程序。问题是,我熟悉的唯一方法是使用
int main ( int argc, char *argv[] ).
然而,我的所有输入始终只接受一个文件,所以我想让用户每次运行程序时都指定argc=2是多余的。有没有一种方法可以让C++隐式地知道只有一个命令行参数?
argc
变量包含调用程序时使用的实际参数数。当您输入main
功能时,它会自动设置。你不能说这个数字是多少,也不能由运行程序的用户手动设置。
如果你想让你的程序只运行特定数量的参数(在你的情况下是一个参数),你必须在main
函数中执行检查:
if (argc != 2)
{
std::cerr << "Invalid number of arguments" << std::endl;
return 1;
}
除了ips的其他答案外,您还应该记住,C99(或C11)标准语言的任何托管环境都会以特定于实现的方式为main
提供参数int argc
和char**argv
。
在DOS和Windows上,有传言称操作系统的命令行接口正在将命令行解析为main
的参数。
在POSIX系统和Linux上,指定每个程序通过POSIX exec函数启动,对于Linux,该函数转换为execve(2)系统调用。在这样的系统上,shell将命令扩展为一组参数(对于execve
),因此可能会执行一些globbing操作:请参见glob(7)。但该程序从一个初始堆栈开始,该堆栈包含(特别是)main
的参数。详细信息是特定于ABI的,对于x86-64上的Linux,请阅读x86-64 ABI规范
您可以保证argc
大于0,argv
的所有第一个argc
元素都是以null结尾的字符串,并且不是指针别名,并且argv[argc]
是NULL
指针。因此,如果您只想要一个程序参数,您应该测试argc==2
,并使用argv[argc]
作为程序参数。
在实践中,您应该始终测试argc
和argv
。GNUglibc提供了两种解析程序参数的方法:通常的getopt和argp。
GNU编码标准规定每个程序至少应接受--help
和--version
程序参数。我讨厌不遵守规则的程序,所以请遵守它…
BTW用于处理文本文件的程序(例如cat(1)…),通常将每个程序参数(不是以-
开头的某个选项)处理为文件路径,因此您的程序可能会在argv
数组的组件上循环(在秩0的第一个之后,这通常是程序名称)。
- 如何将 txt 文件中的行分隔为组件C++
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 一种在C++中读取TXT配置文件的简单方法
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 如何修复此iFile以将.txt输出到控制台
- 无法打开.txt文件
- CMakeLists.txt中的命名空间表示法
- Arduino从Txt读取整数
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何拆分文件中.txt字母并使用c ++使用数组进行扑克?
- 使用fstream对txt文件中的数字进行循环
- Visual Studio在尝试读取resource.txt文件时崩溃
- 更正 CMakeList.txt 用于谷歌测试的文件?
- 如何从txt文件中读取多个不同长度的数组?
- 从带有空间的.txt中读取完整的文本,为单个变量C
- 使用 QFtp 下载单个.txt
- 如何在不指定argc的情况下在C++中读取单个.txt文件作为输入
- 使用mpi将矩阵写入单个txt文件
- 打开c++ TXT文件并将单个数字读入int数组