C++ 如何读取单个.txt文件作为C++;不指定argc

C++ 如何读取单个.txt文件作为C++;不指定argc,c++,C++,我正在尝试创建一个程序,它可以读取单个.txt文件。问题是,我熟悉的唯一方法是使用 int main ( int argc, char *argv[] ). 但是,我的所有输入始终只接受一个文件,因此我想让用户在每次运行程序时指定argc=2是多余的。有没有一种方法让C++隐式知道只有一个命令行参数?< p> ARC变量包含实际调用的参数的数量。当输入main功能时,它会自动设置。你不能说这个数字是多少,也不能由运行程序的用户手动设置 如果您想让程序仅使用特定数量的参数(在您的示例中为一个参

我正在尝试创建一个程序,它可以读取单个.txt文件。问题是,我熟悉的唯一方法是使用

int main ( int argc, char *argv[] ).

但是,我的所有输入始终只接受一个文件,因此我想让用户在每次运行程序时指定argc=2是多余的。有没有一种方法让C++隐式知道只有一个命令行参数?

< p> <代码> ARC变量包含实际调用的参数的数量。当输入
main
功能时,它会自动设置。你不能说这个数字是多少,也不能由运行程序的用户手动设置

如果您想让程序仅使用特定数量的参数(在您的示例中为一个参数)运行,则必须执行check-in-you
main
函数:

if (argc != 2)
{
    std::cerr << "Invalid number of arguments" << std::endl;
    return 1;
}
if(argc!=2)
{

std::cerr变量
argc
包含程序调用的实际参数数。当输入
main
函数时,会自动设置该参数。您不能说该数字是多少,也不能由运行程序的用户手动设置

如果您想让程序仅使用特定数量的参数(在您的示例中为一个参数)运行,则必须执行check-in-you
main
函数:

if (argc != 2)
{
    std::cerr << "Invalid number of arguments" << std::endl;
    return 1;
}
if(argc!=2)
{
std::cerr除此之外,您应该记住(或C11)标准语言的任何托管环境都以特定于实现的方式为
main
提供参数
int argc
char**argv

在DOS和Windows上,谣传操作系统的命令行界面正在将命令行解析为
main
的参数

在POSIX系统和Linux上,指定每个程序通过启动,Linux将其转换为系统调用。在此类系统上,正在将命令扩展为参数数组-for
execve
-因此可以执行一些操作:请参阅。但该程序是从包含以下内容的初始堆栈开始的(特别是)
main
的参数。详细信息是特定的,对于x86-64上的Linux,请阅读

您可以保证
argc
为>0,
argv
的所有前
argc
元素都是以null结尾的字符串,不是指针别名,
argv[argc]
NULL
指针。因此,如果只需要一个程序参数,则应测试
argc==2
,并应使用
argv[argc]
作为程序参数

在实践中,您应该始终测试
argc
argv
。提供了两种解析方法:通常的和同样的

指定每个程序应至少接受
--help
--version
程序参数。我讨厌不遵循该规则的程序,所以请遵循它

顺便说一句,对于处理文本文件的程序(例如…),通常会将每个程序参数(不是以
-
开头的选项)作为文件路径进行处理,因此您的程序可能会在组件上循环(在秩0的第一个之后,这通常是程序名)
argv
array.

除此之外,您应该记住(或C11)标准语言的任何托管环境都以特定于实现的方式为
main
提供参数
int argc
char**argv

在DOS和Windows上,谣传操作系统的命令行界面正在将命令行解析为
main
的参数

在POSIX系统和Linux上,指定每个程序通过启动,Linux将其转换为系统调用。在此类系统上,正在将命令扩展为参数数组-for
execve
-因此可以执行一些操作:请参阅。但该程序是从包含以下内容的初始堆栈开始的(特别是)
main
的参数。详细信息是特定的,对于x86-64上的Linux,请阅读

您可以保证
argc
为>0,
argv
的所有前
argc
元素都是以null结尾的字符串,不是指针别名,
argv[argc]
NULL
指针。因此,如果只需要一个程序参数,则应测试
argc==2
,并应使用
argv[argc]
作为程序参数

在实践中,您应该始终测试
argc
argv
。提供了两种解析方法:通常的和同样的

指定每个程序应至少接受
--help
--version
程序参数。我讨厌不遵循该规则的程序,所以请遵循它


顺便说一句,对于处理文本文件的程序(例如…),通常会将每个程序参数(不是以
-
开头的选项)作为文件路径进行处理,因此您的程序可能会在组件上循环(在秩0的第一个之后,这通常是程序名)
argv
数组。

没有。但是用户没有手动指定
argc
,操作系统会从传递给程序的实际参数数中扣除。你所要做的就是添加一个简单的
if
进行验证。太棒了!我没有任何线索。向我解释的方式听起来像是用户指定的。比ks!噢!我明白了。在这种情况下,这里有一个例子:在命令行(
cmd.exe
如果你在Windows上),键入你的程序名,后跟所有以空格分隔的参数(如果它们包含空格,则加引号)。例如
report\u mouse\u count“mices.txt”
您的程序将在
argc
设置为2且
argv
包含两项的情况下被调用,