argv参数出现int main()问题

int main() issue with argv parameter

本文关键字:问题 main int 参数 argv      更新时间:2023-10-16

EDIT:以下代码通过Microsoft Visual Studio 2013 运行

我有以下脚本:

#include "stdafx.h"
#include <iostream>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;

int main(int argc, char* argv[])
{
    if (argc < 2)
    {
        std::cout << "Usage: tut1 pathn";
        return 1;
    }
    std::cout << argv[1] << std::endl;
    std::cout << "File Size is: " << file_size(argv[1]) << std::endl;

    return 0;
}

但是当我用ctrl+f5运行它时,我得到了这个消息(它是由代码本身的if条件预测的:

Usage: tut1 path

争论的数量似乎低于2。

为什么会发生这种情况?我应该如何避免这个问题?

编辑

当我删除以下行时:

std::cout << "File Size is: " << file_size(argv[1]) << std::endl;

我在控制台上打印了"Filing.cpp",这意味着argv[0]的值是Filing.cpp,这进一步表明argv正在正确地从项目的Debuger的命令参数中获取命令。

但当我再次添加该行时,我看到消息"Filing.exe not found or not built by the last incremental link;"

最简单的解决方案是在编译输出的目录中打开一个提示,调用程序并传入文件名字符串。

例如FileSize.exe foo.jpg

这样可以省去项目配置选项的麻烦。

if触发是因为应用程序文件名被认为是第一个参数,所以argc == 1小于2,触发指令。

如果像这样运行它,那么参数的数量只有一个(可执行文件的名称)。如果您正在使用Visual Studio(很可能是这样),并且您想添加参数,请转到属性->调试并在"命令参数"上添加所需的参数

如果要运行带有参数的程序,请通过cmd运行exe文件。Exe文件将在调试目录中。在cmd中,转到exe文件的路径,然后像ABC.exe一样运行命令,然后运行参数。