Добрый день, уважаемые эксперты! Я в Си совсем недавно, поэтому сразу прошу прощения если вопрос покажется совсем... м-м-м.. неумным. Я недопонял как в С++ возможно работать со строками. Собственно задача у меня такая: сфомировать строку из различных частей (некотрые формируются программно), конечный итог -- некий URL для дальнейшего использования. Просто получить доступ к переменным типа string через #include не получается. Пишет, что string у меня "undefined". Я так понял, что в файле string.h содержатся описания, формирующие сам тип string, а также описываются функции, работающие с этим типом. Точнее описывается тип basic_string, но потом он идет как string (ну это я так понял, может и неправильно). Исходя из того, что я так это понял, пытался (путем копирования из примеров хэлпа) сделать вставки чего-то там насчет шаблонов.
Естессно, не работает, я ваще-то в шаблонах не разобрался еще :-)) На Си++ перехожу с VB (ну плюньте, плюньте в меня) и всего несколько дней как. Короче, либо я в лыжах, либо одно из двух. В общем, поможите, хто чем может, плииз. Буду рад и объяснениям, и ссылкам (на Страуструпа прошу пока не посылать). С уважением, Mike. ЗЫ: Мои среды: С++ 5.02 и Билдер 5.0
Добрый день, Mike! Ничё не понял, но попробуй объявлять свои переменные из #include как extern! Т.е. перед обьявлением переменной просто ставиш его: extern char* my_var; Ответ отправлен: 05.03.2003, 21:20 Отправитель: Frankie Отвечает Eugene
Приветствую Вас, Mike! В Builder'e есть очень хороший тип AnsiString, в котором очень просто объединять строки. Например: //нужен vcl.h AnsiString asWord1 = "http"; AnsiString asWord2 = "://"; AnsiString asResult = asWord1 + asWord2; В результате у нас получится asResult равен "http://". На С++ немножко иначе. Например: //нужен string.h char szResult[256]; char szWord1[] = "http"; char szWord2[] = "://"; strcat(szResult, szWord1); strcat(szResult, szWord2); В результате у нас szResult указывает на строку "http://"; Ответ отправлен: 05.03.2003, 10:23 Отправитель: Eugene Отвечает Yuri Gordienko
Доброе время суток, Mike! Как мне кажется, - тебе нужно тип писать не string, а std::string Удачи Ответ отправлен: 05.03.2003, 10:24 Отправитель: Yuri Gordienko Отвечает Avl2k
Доброе время суток, Mike! Все классы STL (например, string) находятся в специальном пространстве имен std, т.е. для доступа к ним необходимо либо явное уточнение (std::string), либо использование директивы using namespace std. C уважением, Avl2k. Ответ отправлен: 06.03.2003, 17:23 Отправитель: Avl2k
Вопрос № 596
Здравствуйте уважаемые эксперты! Очень рад, что рассылка ожила:) Вопрос такой: Как с помощью WinApi(только api) прочитать файл (отобразить его в память) и вывести в cout (или обрабатывать)? В приложении мой вариант. Там вроде бы читается, но вот как вывести его в cout или обрабатывать??? Очень надеюсь на вашу помощь!
Добрый день, Саша! Думаю, что вся проблема в функции GetFileSize(). Второй параметер нужен только если твой файл размером больше 4ГБ, врядли он у тебя настолько большой. Тебе следовало написать dwFileSize = ::GetFileSize(hFile, NULL); ну или в крайнем случае dwFileSizeLow = ::GetFileSize(hFile, &dwFileSizeHigh); После этих изменений я думаю твоя программа заработает. Ответ отправлен: 05.03.2003, 13:46 Отправитель: vitya Отвечает DiGiT[old]
Доброе время суток, Саша! void main это ересь в стандарте говорится int main. Во вторых ты можешь считать больше чем твой буффер он у тебя 10 байт а если считает больше будет Access violation :) Потом надо ставить 0 в конце строки иначе лажа будет. Зачем LPSTR это не char* дальний :))
Ответ отправлен: 06.03.2003, 02:06 Отправитель: DiGiT[old] Отвечает Ramzes
Приветствую Вас, Саша! Так в чем проблема я не понял ? ты же уже выводишъ его в cout ... cout<< (LPSTR)lpBufToRead << endl; !!!! У тебя же естъ массив (то бишъ строка), вот ее и обрабатывай, а потом запиши все обратно при помощи WriteFile. Ответ отправлен: 06.03.2003, 08:34 Отправитель: Ramzes
Вопрос № 597
Доброе время суток , эксперты ! ******************************* Приложение состоит из одного модального диалога. При запуске хочу чтоб диалог был невидимым.Т.к. приложение активизируется через трэй.В свойствах стиль 'Visible' не устанавливаю.Но диалог все равно выводится. Что делать ?
Здравствуйте, IceWINteR! Сразу после создания диалога, его процедуре посылается сообщение WM_INITDIALOG. Его отлавливаешь и делаешь ShowWindow(hWnd,SW_HIDE), а когда надо будет показать его, делаешь ShowWindow(hWnd,SW_SHOW). В приложении см. описание функции. Удачи.
Приложение: Ответ отправлен: 05.03.2003, 14:43 Отправитель: nix Отвечает akul
Добрый день, IceWINteR! ::ShowWindow (m_hWnd, SW_HIDE) в хендлере WM_INITDIALOG
Ответ отправлен: 05.03.2003, 14:53 Отправитель: akul Отвечает Dzik
Приветствую Вас, IceWINteR! А на чем пишешь на(MFC/API), скорее всего в каком нибудь конструкторе или еще где окно принудительно выводится. Ответ отправлен: 05.03.2003, 14:53 Отправитель: Dzik Отвечает PL
Доброе время суток, IceWINteR! В InitIstance убери вызов DoModal и добавь необходимый те код для трея... Надеюсь хоть чемто помог Ответ отправлен: 05.03.2003, 15:58 Отправитель: PL Отвечает DiGiT[old]
Здравствуйте, IceWINteR! Когда у диалога делаешь DoModal() он разумеется появится на то он и диалог, так как там делается ShowWindow(SW_SHOW). Делай после создания окна диалога ShowWindow(SW_HIDE); Ответ отправлен: 06.03.2003, 03:48 Отправитель: DiGiT[old] Отвечает Ramzes
Здравствуйте, IceWINteR! в функции CDialog::InitDialog() напиши следующее ShowWindow(SW_HIDE); Ответ отправлен: 06.03.2003, 08:36 Отправитель: Ramzes
Вопрос № 598
Уважаемые эксперты! Не могли бы Вы кинуть мне на мыло полноценный пример для работы со списками (созданиедобавление элементовудаление и др.)
Добрый день, Дима Мусиенко! Вот тебе примерчик из МСДНа... Создание // pParentWnd is an external pointer to the parent window. extern CWnd* pParentWnd; // The pointer to my list box. extern CListBox* pmyListBox; pmyListBox->Create(WS_CHILD|WS_VISIBLE|LBS_STANDARD|WS_HSCROLL, CRect(10,10,200,200), pParentWnd, 1); Добавление записей CString str; for (int i=0;i < 10;i++) { str.Format(_T("item string %d"), i); pmyListBox->AddString( str ); } Удаление записей for (int i=0;i < pmyListBox->GetCount();i++) { pmyListBox->DeleteString( i ); }
Ответ отправлен: 05.03.2003, 16:10 Отправитель: PL Отвечает DiGiT[old]
Здравствуйте, Дима Мусиенко! вот тебе из MFC думаю достаточно полно :)) Млин через рассылку не получается послать стока текста я те на мыло послал Ответ отправлен: 06.03.2003, 03:50 Отправитель: DiGiT[old] Отвечает PoEt
Приветствую Вас, Дима Мусиенко! А примеры экзаменационных программ с КГТУ для работы тебе подойдут? (Проверены и работают! Сам сдавал!) И много других есть! Правда денек подождать предется, мне их с сервака в КГТУ слить надо! Если надо пиши, скинем! Ответ отправлен: 06.03.2003, 07:42 Отправитель: PoEt
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.