2016-07-27 17 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. Как это сделать, будет зависеть от вашей оболочки или среды 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], если перетаскивание не работало (что должно было сработать), то что-то пошло не так

или попробуйте использовать FULL PATH, вам не нужно копировать argv [1 ], просто используйте его напрямую ...

+0

Я пробовал перетаскивание, но он, похоже, не работает. В FULL PATH вы хотите использовать его в качестве аргумента или просто имя файла в качестве аргумента? –

+0

Если это не сработало, что-то пошло не так, я предлагаю cout весь аргумент: for (int i = 0; i user5962153

+0

, если ваш cout показывает правильный путь для вашего файла, но является файлом NULL inf FILE *, тогда ваш файл, вероятно, открывается другим приложением. – user5962153