Модератор: Модераторы разделов
Dmitry1983
Сообщения: 119
ОС: осваиваю gentoo
Сообщение
Dmitry1983 » 25.09.2007 13:58
Никак не могу понять почему не работает так, как задумано, вот такой код:
Код: Выделить всё
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
if (argv[1]=="enc") cout <<550; //например
cout <<argv[1]
return EXIT_SUCCESS;
}
Ввожу в консоли
Получаю
enc
А хотел
550enc
Где косяк?
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5
Сообщение
sergio » 25.09.2007 14:01
Dmitry1983 писал(а): ↑ 25.09.2007 13:58
Никак не могу понять почему не работает так, как задумано, вот такой код:
Где косяк?
std::strcmp потому что надо использовать, а не указатели сравнивать...
argv [1], как и "строка", имеют тип char*/const char* - указатель...
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Dmitry1983
Сообщения: 119
ОС: осваиваю gentoo
Сообщение
Dmitry1983 » 25.09.2007 14:17
Код: Выделить всё
int main(int argc, char *argv[])
{
const char* e="enc";
if (strcmp(argv[1],e)) cout <<550; //тут не хочет
if (argv[2]="test") cout <<"test"; //тут отрабатывает
return EXIT_SUCCESS;
}
Т.е. не отрабатывает только первый параметр, 2й и следующие вполне себе сравниваются
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5
Сообщение
sergio » 25.09.2007 14:23
Dmitry1983 писал(а): ↑ 25.09.2007 14:17
Код: Выделить всё
int main(int argc, char *argv[])
if (argv[2]="test") cout <<"test"; //тут отрабатывает
}
Т.е. не отрабатывает только первый параметр, 2й и следующие вполне себе сравниваются
А он не сравнивается, он у вас там приваивается. Присвоение любого ненулевого указателя в условии конструкции if будет истинно.
Внимательнее надо быть.
Введите вторым аргументом не "тест" а что-нибудь другое - и сравните результаты. =)
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Dmitry1983
Сообщения: 119
ОС: осваиваю gentoo
Сообщение
Dmitry1983 » 25.09.2007 14:28
sergio писал(а): ↑ 25.09.2007 14:23
Внимательнее надо быть.
Введите вторым аргументом не "тест" а что-нибудь другое - и сравните результаты. =)
Да, сорри.
Так что с главным вопросом, почему не сравниваются
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5
Сообщение
sergio » 25.09.2007 14:32
Dmitry1983 писал(а): ↑ 25.09.2007 14:28
Так что с главным вопросом, почему не сравниваются
Гыг, так strcmp возвращает ноль если строки равны.
Так что
if (! strcmp(...)) do ... ;
ну или
if (0 == strcmp(...)) do ... ;
если строже...
Я правильно понял в чем был "главный вопрос"? =)
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Dmitry1983
Сообщения: 119
ОС: осваиваю gentoo
Сообщение
Dmitry1983 » 25.09.2007 14:40
Тьфу...
Спасибо!