Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача аргументов main, программа копирования файлов 
V
    Опции темы
IKM2007
Дата 30.7.2008, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Добрый вечер всем.
В книге пример программы, которая выполняет посимвольное копирование одного файла в другой.
Вот сам код программы

Код

#include <iostream>
#include <fstream>
using namespace std;
int main(int argc,char *argv[])
{
if(argc!=3)
cout<<"format: copy in_file out_file\n";
else
{
    ifstream inFile (argv[1],ios::in);
    if(!inFile)
        cout<<argv[1]<<" you cannot open\n";
    ofstream outFile(argv[2],ios::out);
    if(!outFile)
        cout<<argv[2]<<" you cаnnot open\n";
    while(!inFile.eof())
        outFile.put((char)inFile.get());
}
return 0;
}

Написано, что аргументы main-а должны передаваться из командной строки, но не написано как.
Так как?Что написать в командной строке?(поискал Google-ом, ничего не нашел, если знаете, сайт где нормально написано, дайте ссылку).
Заранее Спасибо.


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
Lazin
Дата 30.7.2008, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Код

int argc,char *argv[]


argc - количество параметров
argv - массив строк
первым всегда передается полное имя исполняемого файла, потом уже твои параметры...

если программа вызывается так:
Код

myprog param1 param2

то:
Код

argc = 3
argv = {/../../myprog, param1, param2}

PM MAIL Skype GTalk   Вверх
Partizan
Дата 30.7.2008, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 67



IKM2007, 

1)пуск - выполнить - cmd.exe
2)в открывшемся окне пишем: имя_программы.exe copy имя_файла1 имя_файла2

часть "copy имя_файла1 имя_файла2" это как раз и есть параметры командной строки


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
IKM2007
Дата 30.7.2008, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Lazin, 
Partizan, 
большое спасибо.

Partizan, у тебя там опечатка
Цитата(Partizan @  30.7.2008,  21:32 Найти цитируемый пост)
в открывшемся окне пишем: имя_программы.exe copy имя_файла1 имя_файла2
, надо писать без copy.
100 сообщении стукнуло, обоим +1


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
mes
Дата 31.7.2008, 03:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(IKM2007 @  30.7.2008,  22:10 Найти цитируемый пост)
Partizan, у тебя там опечатка
Цитата(Partizan @  30.7.2008,  21:32 Найти цитируемый пост)
в открывшемся окне пишем: имя_программы.exe copy имя_файла1 имя_файла2
, надо писать без copy.

там не опечатка, все правильно. Partizan показал пример командный строки
Цитата(Partizan @  30.7.2008,  21:32 Найти цитируемый пост)
часть "copy имя_файла1 имя_файла2" это как раз и есть параметры командной строки 

а с копи она будет или без уже решать автору проги по обстоятельствам


--------------------
PM MAIL WWW   Вверх
IKM2007
  Дата 31.7.2008, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



Цитата(mes @  31.7.2008,  03:32 Найти цитируемый пост)
а с копи она будет или без уже решать автору проги по обстоятельствам

OK.Понял.
Если можно, еще вопросы.
Вопрос 1: Как командная строка "узнает", сколько параметров я должен передать? Я правильно понял, что в выше выложенной мною программе это следует из того, что было использовано argv[1] и argv[2], то есть 3 параметра. Но вот в этой программе как узнать, сколько параметров
Код

#include <cstdio>
using namespace std;
 int main ( int argc, char *argv[], char *argp[])
     {  int i=0;
        printf ("\n Имя программы %s", argv[0]);
        for    (i=1; i>=argc; i++)
        printf ("\n аргумент %d равен %s", argv[i]);
        printf ("\n   Параметры операционной системы:");
        while  (*argp)
          {  printf ("\n %s",*argp);
             argp++;
          }
        return (0);
     }


Вопрос 2: Что за параметр *argp[]?

Заранее Спасибо.


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
W4FhLF
Дата 31.7.2008, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



Цитата(IKM2007 @  31.7.2008,  08:46 Найти цитируемый пост)
Как командная строка "узнает", сколько параметров я должен передать?


Перед твоей функцией main компилятор вставляет свой служебный код, в котором среди прочего подсчитывается кол-во параметров переданных программе(argc), создаётся массив указателей и туда кладутся эти параметры по отдельности (argv[]), после чего вызывается твоя функция main. 


Цитата(IKM2007 @  31.7.2008,  08:46 Найти цитируемый пост)
 Но вот в этой программе как узнать, сколько параметров


Ну там же есть цикл:

Код

        while  (*argp)
          {  printf ("\n %s",*argp);
             argp++;
          }


Как только в массиве argp[] встретится нулевой указатель - это знак, что конец массива достигнут.

Добавлено @ 09:03
Цитата(IKM2007 @  31.7.2008,  08:46 Найти цитируемый пост)
Вопрос 2: Что за параметр *argp[]?


Это переменные окружения.

И код, кстати, которые выше, вообще не рабочий.

Код

#include <cstdio>

int main (int argc, char *argv[], char *argp[])
{  
    printf("Имя программы %s\n", argv[0]);

    for(unsigned i = 1; i < argc; i++)
        printf("\tаргумент %d равен %s\n", argv[i]);

    printf ("Параметры операционной системы:\n");
    while  (*argp)
    {  
        printf ("\t%s\n",*argp);
        ++argp;
    }

    return 0;
}


Это сообщение отредактировал(а) W4FhLF - 31.7.2008, 09:56


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
IKM2007
Дата 31.7.2008, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


Профиль
Группа: Участник
Сообщений: 702
Регистрация: 26.4.2008
Где: olmedreca

Репутация: 3
Всего: 40



W4FhLF, спасибо за разяснения.

Цитата(W4FhLF @  31.7.2008,  09:00 Найти цитируемый пост)
И код, кстати, которые выше, вообще не рабочий.

почему, если вводишь 
Цитата

"путь файла.exe" working 'C program' 1
, то печатает какие то параметры компа.

Вопросы остались, но лучше самому пробовать, експерементировать. Тема закрыта.
Кстати, кто может сказать, где детально про все это написано?(ссылка или книга)


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0568 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.