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一样运行命令,然后运行参数。