来自命令行

时间:2015-11-10 06:21:30

标签: c++ command-line-arguments fstream invalidoperationexception

我在这里尝试从文件中获取输入。如果用户从cmd运行此.exe并提供类似example.exe input.txt的文件名 然后它显示文件并读取。但是如果用户没有给出文件名,那么它就像程序的运行一样运行。

程序运行良好当我在运行时从cmd提供输入它运行完美,但是如果我在运行此文件时没有给出文件名而只运行example.exe异常显示错误

  

异常:无效的空指针

我的代码在这里:

// inputfile.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<string>
#include<fstream>

using namespace std;

void main(int argc, char* argv[])
{
    try {

        if (argc > 0)
        {
            string filename = argv[1];
            ifstream in(filename);
            in.open(filename);
            if (in.is_open())
            {
                cout << "file opened, do something with file";
            }
            else
            {
                cout << endl << "You have Entered Wrong File Name Or File Not Exist in Project's Library" << endl;

            }
        }

    }
    catch (exception e)
    {

    }

    cout << endl << "do with the simple program";

    _getch();
}

2 个答案:

答案 0 :(得分:1)

逻辑错误在行

  if (argc > 0)

需要

  if (argc > 1)
如果在没有参数的情况下调用程序,则

argv[1]NULL

argc至少为1,第一个参数是程序的名称。当使用一个参数调用程序时,argc为2,argv[1]是第一个参数。

答案 1 :(得分:0)

当只有一个参数(总是exec文件本身,例如使用./exec_file或只是双击exec文件)时,argv [1]会抛出异常。

以下是一些提示:

  1. 尝试学习如何调试代码(IDE,如Visual Studio,Ecplise或gdb)。
  2. VC ++不是标准的c ++,这意味着它只能在Windows上运行,而不能在跨平台运行。您最好学会使用g ++编译器(linux)。