Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Требуется описание arg_v


Автор: Twilight 21.12.2007, 21:15
Киньте, пожалуйста, код с кратким примером работы arg_v. Или подскажите где можно почитать про это.

Автор: papam 21.12.2007, 21:38
Посмотри тут:

http://www.bebox.nu/bebooks/BeBookR5/The%20Kernel%20Kit/ImageConcepts.html

Автор: Twilight 21.12.2007, 21:43
Спасибо, но я ничего не понял. Можно пример в виде кода?  smile 

Если честно, то мне нужно написать программу, которая будет принимать "aaa", а выводить "bbb".

Автор: papam 21.12.2007, 21:53
Код

if(arg_v[1] == "aaa")
{
cout<<"bbb";
}


Автор: Twilight 21.12.2007, 21:56
Цитата(papam @ 21.12.2007,  21:53)
Код

if(arg_v[1] == "aaa")
{
cout<<"bbb";
}


А если полностью?

Автор: papam 21.12.2007, 22:02
Код


int main(int argsc, *arg_v)
{
   if(argv[1] == "aaa")
     {
         cout << "bbb";
     }
}

здесь идет с единицы, потому что нулевой элемент - это путь к файлу ехе

Автор: Twilight 21.12.2007, 22:18
Цитата
(3) : error C2059: syntax error : ','
(3) : error C2143: syntax error : missing ')' before '*'
(3) : error C2143: syntax error : missing '{' before '*'
(3) : error C2059: syntax error : ')'
(4) : error C2054: expected '(' to follow 'arg_v'

Компилирую как файл .c

Автор: papam 21.12.2007, 22:25
Нормально все компилится:
Код

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
   
   if(argv[1] == "aaa")
     {
         cout << "bbb";
     }

}



Автор: Twilight 21.12.2007, 22:40
Понял из такого примера.

Код

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i;
    for (i = 0; i < argc; i++)
    {
        printf("%d: %s\n",i,argv[i]);
    }
}

Автор: Twilight 24.12.2007, 02:01
Почему не работает вот такой код? Вроде всё верно.

Код

#include <stdio.h>

int main(int arg_n, char *arg_v[])
{
    if(arg_v[1] == "aaa")
    {
        arg_v[1] = "bbb";
        printf("%s",arg_v[1]);
    }
}

Автор: jonie 24.12.2007, 03:36
переименуй файл в cpp или компилируй явно указывая что это с++ файл, а НЕ с

Автор: Twilight 24.12.2007, 03:42
Цитата(jonie @ 24.12.2007,  03:36)
переименуй файл в cpp или компилируй явно указывая что это с++ файл, а НЕ с

А почему так не работает? Мне нужно сдавать как C, а не как C++...

Автор: nickless 24.12.2007, 04:02
Цитата(Twilight @  24.12.2007,  00:01 Найти цитируемый пост)
if(arg_v[1] == "aaa")

Здесь сравниваются указатели, а не строки, чтобы сравнить строки нужно использовать функции вроде strcmp() из string.h.
Кроме того нужно проверять, а есть ли вообще 1-й параметр, иначе программа может упасть с зегфолтом.

В общем делать примерно так:
Код

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[])
{
    if (argc > 1 && strcmp(argv[1], "aaa") == 0)
    {
        printf("bbb\n");
    }
    return 0;
}


Да, затирать argv[1] для того чтобы вывести bbb не нужно.

Автор: Twilight 24.12.2007, 04:18
Условие игнорирует.

Код

#include <stdio.h>
#include <string.h>

int main(int arg_n, const char *arg_v[])
{
    if(arg_n > 1 && strcmp(arg_v[1],"aaa") == 0);
    {
    //    arg_v[1] = "bbb";
        printf("bbb\n");
        printf("Press any key for exit...\n");
        getchar();        
    }
    return 0;
}
}

Автор: EnergoHokum 24.12.2007, 08:45
Семён Семёныч! Ну кто-же так делает! Что это за 
Код

if(arg_n > 1 && strcmp(arg_v[1],"aaa") == 0);

Точку с запятой зачем после условия поставил? Потому и игнорирует.
Код

strcmp(arg_v[1],"aaa") == 0

и
Код

arg_n > 1

почему в скобки круглые не занёс? Приоритеты операторов ещё никто не отменял.
Код

#include <stdio.h>
#include <string.h>
int main(int arg_n, const char *arg_v[])
{
    if( (arg_n > 1) && (strcmp(arg_v[1],"aaa") == 0) )
    {
    //    arg_v[1] = "bbb";
        printf("bbb\n");
        printf("Press any key for exit...\n");
        getchar();        
    }
    return 0;
}

Вот так работает, компилировал GCC-ом.

Автор: Twilight 24.12.2007, 09:39
Цитата(EnergoHokum @ 24.12.2007,  08:45)
Семён Семёныч! Ну кто-же так делает! Что это за 
Код

if(arg_n > 1 && strcmp(arg_v[1],"aaa") == 0);

Точку с запятой зачем после условия поставил? Потому и игнорирует.
Код

strcmp(arg_v[1],"aaa") == 0

и
Код

arg_n > 1

почему в скобки круглые не занёс? Приоритеты операторов ещё никто не отменял.
Код

#include <stdio.h>
#include <string.h>
int main(int arg_n, const char *arg_v[])
{
    if( (arg_n > 1) && (strcmp(arg_v[1],"aaa") == 0) )
    {
    //    arg_v[1] = "bbb";
        printf("bbb\n");
        printf("Press any key for exit...\n");
        getchar();        
    }
    return 0;
}

Вот так работает, компилировал GCC-ом.

Блин! Не заметил я эту точку с запятой. Поэтому и не работала программа. Спасибо огромное, всё работает! smile

Писал ночью, поэтому многое мог пропустить. Лабораторные сдаю, чтобы до экзамена допустили. Времени совсем нет, поэтому приходится писать ночью. Даже спать некогда. :(

Автор: EnergoHokum 24.12.2007, 10:30
Нормально, больше будешь писать -- меньше ошибок делать будешь (синтаксических smile).

Автор: nickless 24.12.2007, 15:03
Цитата(Twilight @  24.12.2007,  07:39 Найти цитируемый пост)
Спасибо огромное, всё работает!

Не забывай помечать вопрос решенным smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)