【问题标题】:int main() issue with argv parameter [duplicate]argv参数的int main()问题[重复]
【发布时间】:2014-10-26 19:23:43
【问题描述】:

编辑:以下代码通过 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 path\n";
        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 正在正确地从项目调试器的命令参数中获取命令。

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

【问题讨论】:

  • 大概是从 IDE 运行它。那是哪个 IDE?
  • @MikeSeymour: #include "stdafx.h" 不言自明:-)
  • 是的,Microsoft Visual Studio 2013。
  • 你在调试器中设置了命令行吗?

标签: c++ boost argv argc


【解决方案1】:

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

例如FileSize.exe foo.jpg

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

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

【讨论】:

  • 除了你不能轻易调试它(虽然不清楚操作是否需要)
  • @stijn 我同意,但考虑到这么简单的程序...... :)
  • 好吧。我添加了参数filing.cpp,但它仍然显示找不到文件rest_of_address/Filing.exe的消息,我什至将Filing.cpp更改为./Filing.cpp,但仍然没有改变。
【解决方案2】:

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

【讨论】:

  • 好吧。我添加了参数filing.cpp,但它仍然显示找不到文件rest_of_address/Filing.exe的消息,我什至将Filing.cpp更改为./Filing.cpp,但仍然没有改变。
  • 请记住,Visual Studio 中的默认文件夹不是包含可执行文件的文件夹。它是包含解决方案文件的文件夹。那里有你想要阅读的文件吗?
  • 如果您添加为参数filing.cpp,为什么它说找不到Filing.exe?这没有意义。 fill.cpp 在另一个目录中
  • @Alex Patchanka 这就是我困惑的原因。我做错了我不知道的事情。
  • 您知道如何在 cmd.exe 窗口中更改目录吗?您可以将目录更改为包含可执行文件的文件夹吗?
【解决方案3】:

如果你想运行带参数的程序,请通过 cmd 运行 exe 文件。 exe文件将在调试目录中。 在 cmd 中转到 exe 文件的路径,然后运行 ​​ABC.exe 之类的命令,然后运行参数。

【讨论】:

  • 这与我 10 分钟前发布的内容有何不同?而且它不一定在“调试”目录中。
  • 只有措辞不同。当我开始写答案时,没有你的答案。
  • 请查看更新后的问题。
猜你喜欢
  • 2011-07-08
  • 2014-10-09
  • 2013-04-01
  • 2011-04-23
  • 2020-11-03
  • 2015-11-07
  • 2014-01-10
  • 1970-01-01
相关资源
最近更新 更多