2016-07-27 91 views
0

我正在尝试使用argv [1]读取文本文件。在我的代码构建argc后仍然只有1,这意味着文件没有被检测到。请参阅下面我的代码:使用argv读取文本文件

#include <iostream> 
#include <string.h> 
#include <fstream> 
using namespace std; 
int main(int argc, char **argv) { 
    char msg[256]={0}; 
    if (argc < 2){ 
     cout<<"file not found"; 
    } 
    if(argc > 1){ 
     strcpy(msg,argv[1]); 
    } 
    FILE *file; 
    if ((file = fopen(argv[1], "r")) == NULL) 
     { 
      printf("file doesnt exist\n"); 
     } 
    fclose(file); 

    cout<<argv[1]; 

} 

我无法弄清楚如何得到ARGC大于1的值,然后读取该文件的内容?

+1

你用来运行程序的命令是什么?即'myexe.exe ????' – NathanOliver

+0

传递参数以获取argc的值大于1.如何实现它取决于您用于运行程序的shell或IDE。 – MikeCAT

+4

您不应该像这样使用'msg',因为'argv [1]'可以直接使用,并且这个复制允许缓冲区溢出。 – MikeCAT

回答

0

的argc保持为1只,这意味着未检测

如果是的argc 1的文件,这意味着没有(命令行)参数被赋予给程序。我建议你改变回应消息以反映这一点。

我怎么得到的argc大于1

你需要传递参数给程序的价值。在命令行,你做这样的:

> ./program_file_name value_of_first_argument 

如果从IDE启动该程序,再看看如何设置命令行参数启动IDE手册。


请注意,如果参数在程序中超过了256个字符,那么您的缓冲区溢出且行为未定义。

+0

我正在使用eclipse,并且在运行配置中,我已经将工作目录设置为我的文件存在的位置以及我指定了文件名的参数。输出结果是我在参数中指定的文件名。在Eclipse中有没有特定的方法? –

0

你有没有试过将你的文件拖放到你的应用程序?这应该给你argv [1],如果拖放不起作用(它应该工作),那么出现问题

或尝试使用完整路径,你并不需要复制argv [1 ],直接使用它...

+0

我试过拖放,但它似乎并没有工作..通过完整的路径你的意思是使用它作为参数或只是文件名作为参数? –

+0

如果它没有工作,出现了问题,我建议关闭所有参数: for(int i = 0; i user5962153

+0

如果您的cout显示文件的正确路径,但为NULL inf FILE *文件,那么您的文件可能由其他应用程序打开。 – user5962153