Здравствуйте Уважаемые Эксперты! Подскажите пожалуйста, как мне на ассемблере вывести на экран один параметр, задающийся программе в командной строке. (заданный следующим образом напр. - C:>write.com/long) P.S. под WIN ещё не пишу только под DOS начал изучать ASM. Заранее благодарен!
Приветствую Вас, kapral! Так чего вопрос в рассылку по C++ посылаешь? В приложении пример как вывести всю строку. А если хочешь найти только ключ, то уже придётся анализировать строку. Например в начале строки содержится полный путь запущенной программы, потом уже то, что передали в качестве параметров.
Приложение: Ответ отправлен: 02.04.2003, 12:27 Отправитель: Eugene
Вопрос № 669
Здравствуйте, уважаемые эксперты. Извините за глупый вопрос, но я только начал изучать С++. Программа позволяет пользователю ввести слово (или предложение). Потом она подсчитывает число введеных символов и сообщает его пользователю. Это в идеале. Моя же программа постоянно показывает одно и тоже неправильное число. Не подскажете, в чем проблема? Спасибо
Приложение: Ответ отправлен: 03.04.2003, 15:54 Отправитель: Eugene Отвечает vitya
Приветствую Вас, faraon! переделай функцию так: int length(char * q) { int x = 0; while (*q++) ++x; } int main() { ... length(p); } Ответ отправлен: 03.04.2003, 15:07 Отправитель: vitya Отвечает Ramzes
Добрый день, faraon! это потому, что ты каждый раз передаешь функции указатель на последний элемент массива. меняем int lenth(char p){...} на int lenth(char* p){...} и x=lenth(p[50]); на x=lenth((char*)p); и все работает :)) Ответ отправлен: 03.04.2003, 15:09 Отправитель: Ramzes Отвечает Avl2k
Приветствую Вас, faraon! 1. p[50] - это не вся строка, а один символ строки. 2. char p - аналогично. В-общем, надо так #include int lenth(char p) { int x=0; // cчетчик длины char *q=&p; // указатель на массив со словом /* Я думаю, пока указатель будет не нулем, введенное слово не закончилось */ while (*q++) x++; return x; } void main() { int x; char p[50]; // массив из 50 char cin >> p; // ввод последовательности символов x=lenth(p[50]); // вызов функции для опр длины cout << x; // вывод длины cin >> x; // чтоб окно не закрылось } С уважением, Avl2k. Ответ отправлен: 03.04.2003, 15:38 Отправитель: Avl2k Отвечает Dzik
Добрый день, faraon! Замени в обьявлении своей функции char p на char *p, с ним и работай(а не с q). А так ты со стеком работаешь. Ответ отправлен: 03.04.2003, 16:00 Отправитель: Dzik Отвечает Morgion
Приветствую Вас, faraon! /* Я думаю, пока указатель будет не нулем, введенное слово не закончилось */while (*q++) x++;- ну- кто ж так говорит-то- не указатель, а значение по адресу, на который этот указатель указывает. И вообще- посмотри в определении ф-и lenth (length- правильней :))- (char p)- то есть 1 символ! А тебе нужно передавать указатель на строку. То есть (char *p). Так как указатель уже передан, то char *q=p. И передавать надо не p[50] (это равносильно *(p+50) :)) потому что это 50 элемент твоей строки. Надо передавать p, то есть адрес строки (указатель). PS: Разберись с указателями по какой-либо книге, которые не раз уже рекомендовались.
Приложение: Ответ отправлен: 03.04.2003, 20:32 Отправитель: Morgion Отвечает DiGiT[old]
Приветствую Вас, faraon! А си и с++ кто изучать будет я что ли за тебя :) Ну мне просто весело стало от такого кода. Во первых p[50] это есть 50-ый элемент относительно p[0], во вторых параметры в процедуру передаются в стеке и брать адрес и потом его использовать от стекового элемента не правильно это я про char *q=&p; В третих нужно сделать так как в приложении ЗЫ я всегда буду искоренять ересь void main(), т.к. функция main должна возвращать значение типа int так говорит стандарт. Запомни это.
Приложение: Ответ отправлен: 04.04.2003, 04:47 Отправитель: DiGiT[old]
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.