从命令提示符运行程序并在C ++中使用argv

时间:2011-04-29 15:03:38

标签: c++ command-line

我编写了一个程序,它从argv [1]获取文件名并对其进行操作。 从visual studio调试时,我从项目选项>> debugging>>命令参数传递文件名,它工作正常并正确打印所有结果。

但是当从命令提示符尝试时,我转到项目/调试I类型

的目录
program

工作正常并在同一窗口中打印“无效输入文件”(这是我的错误处理技术)

但是当我输入

program test.txt

它什么也没做。我认为代码没问题,因为它在调试器中工作正常。

代码:

int main(int argc, char *argv[]) 
 { 
int nLines;
string str;

if(argv[1]==NULL)
{
    std::cout << "Not valid input file" << endl;
    return 0 ;

}
ifstream infile(argv[1]);

getline(infile,str);
nLines = atoi(str.c_str());//get number of lines

for(int line=0 ;line < nLines;line++)
{
    //int currTime , and a lot of variables ..
            //do a lot of stuff and while loops
          cout << currTime <<endl ;

}
    return 0 ;
    }

3 个答案:

答案 0 :(得分:3)

您不检查文件是否已成功打开,getline是否返回错误代码,或者字符串到整数转换是否失败。如果发生任何错误,我认为是这种情况,nLines将等于0,将不会执行任何循环,程序将以返回码0退出。

答案 1 :(得分:3)

此代码对我在命令行上运行正常。

#include <string>
#include <algorithm>
#include <functional>
#include <vector>
#include <iostream>
using namespace std;

int main(int argc, char *argv[]) 
{ 
    int nLines;
    string str;

    if(argv[1]==NULL)
    {
        std::cout << "Not valid input file" << endl;
        return 0 ;

    }
    else
        std::cout << "Input file = " << argv[1] << endl;
}

输出:

C:\Users\john.dibling\Documents\Visual Studio 2008\Projects\hacks_vc9\x64\Debug>hacks_vc9.exe hello
Input file = hello

顺便说一句,这段代码充其量是危险的:

if(argv[1]==NULL)

在尝试取消引用可能非常狂野的指针之前,您应该检查argc的值。

答案 2 :(得分:1)

该文件可能包含无效的数字第一行(可能以空格或BOM开头)。

这将解释没有输出,因为如果nLines == 0没有预期输出