В этой специальной теме новички могут задавать "элементарные" вопросы по синтаксису и прочим начинаниям в языке.
Как заставить программу читая файл скрадывакать каждую строку в определенную переменную? (1 строка = 1 переменная)
27.05.2007 18:14:51, KEZ KEZ: Code: #include <stdio.h> int main(int argc, char* argv[]) { char buf[256]; FILE *f = fopen( "C:\\1.txt", "r" ); while (fgets( buf, 255, f )) strncpy( string, buf, 255 ); fclose( f ); return 0; } где string - очередная переменная в которую положится очередная строка 27.05.2007 18:15:00, KEZ запости *** я забанен(
Как программно с помощью с++ обращаться по протоколу http. Как к простым файлам? пример: FILE *f = fopen( "http://sait.com", "r" ); может вопрос мой некоректен , но я думаю поймут )))
нет, либо UrlDownloadToFile, либо открыть сокет вручную от кеза: 27.05.2007 18:43:17, KEZ #include <stdio.h> #include <winsock2.h> // хедер с описанием wsa ф-ий // для ms vc++6.0 и др - подключаем lib'у с импортами wsa ф-ий #pragma comment( lib, "wsock32.lib" ) int main(int argc, char* argv[]) { char request[1024*5]; // буффер под запрос char response[1024]; // буффер под ответ sockaddr_in s_a; WSADATA wd; // структура WSADATA WSAStartup( MAKEWORD( 2, 2 ), &wd ); // инициализируем wsa SOCKET s = socket( AF_INET, SOCK_STREAM, 0 ); // создаем сокет if (s == INVALID_SOCKET) return 255; // если ошибка - выход s_a.sin_addr.s_addr = inet_addr( "89.108.80.80" ); // айпи сервера, в данном случае - античат.ру s_a.sin_port = htons( 80 ); // порт сервера s_a.sin_family = AF_INET; if (connect( s, (struct sockaddr*)&s_a, sizeof( s_a ) ) == SOCKET_ERROR) return 255; // SOCKET_ERROR - невозможно подключится к сереверу char url[] = "/"; // страница char host[] = "antichat.ru"; // хост // формируем запрос sprintf( request, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: Close\r\n\r\n", url, host ); send( s, request, strlen( request ), 0 ); // послать запрос recv( s, response, 1023, 0 ); // максимум получить 1023 байта printf( "%s\r\n", response ); // вывести ответ на экран closesocket( s ); // закрываем сокет WSACleanup(); // деинициализируем wsa return 0; } 27.05.2007 18:45:56, KEZ отпиши от меня кроме кода вот что 27.05.2007 18:46:28, KEZ "далее обрезай шапку ответа сервера (HTTP/1.1 200 OK и т.п.), все оставшееся - будет то, что вернул сервер по запрошеному адресу, например /1.txt. Другие варианты с winapi - InternetReadFile(), UrlDownloadToFile() см. msdn..." 27.05.2007 18:45:09, KEZ "альт. вариант - InternetReadFile()" 27.05.2007 18:45:12, KEZ отпиши
Короче, смысл проги в том, что... а, ладно щас исходник кину: Code: #include <stdio.h> #include <stdafx.h> #include <iostream> #include <string.h> using namespace std; class massive_s { public: massive_s (char*, int, float); void show_data (void); /* void fetch (int); */ private: char name[64]; int marck; float m_marck; }; massive_s::massive_s (char *name, int marck, float m_marck) { strcpy (massive_s::name,name); massive_s::marck = marck; massive_s::m_marck = m_marck; if (m_marck > 3.5) strcat (massive_s::name," IIEPEBEDEH"); else strcat (massive_s::name," HE IIEPEBEDEH"); } void massive_s::show_data (void) { cout <<" Name: "<< name << endl; cout <<" Ocenka: "<< marck << endl; cout <<" Cpednjaja ocenka: " << m_marck << endl; } int main (void) { /* здесь нужен код, который считывал бы из вайла построчно переменные, и формировал запрос в конструктор типа: massive_s w1(string1, int1, float1); где стринг, интеджер и флоат - вытащенные из файла переменные (стринг - первая строка, интеджер - 2 и флоат - 3, причем в файле продобных строк 100 (т.е. они чередуюццо: Вася Пупкин 1 3.3 Миша Ипачевский-Распиндосов 4 4.5 Саша шнуровской 5 3.5 ) */ }
Вопрос: idHTTPServer ... сохранение удаленного файла на винте(через браузер)... TFileStream *fs=new TFileStream(MyFile,fmOpenRead); try { ResponseInfo->ResponseNo=200; ResponseInfo->ContentLength= fs->Size; ResponseInfo->ContentStream=fs; ResponseInfo->Headers->Add("Content-Disposition: attachment; filename=MyFile.exe\r\n"); ... Сохраняет файл , но в начале файла записывает инфо с запроса (Server: Indy, Content-Length и др) , что в свою очредь убивает его работоспособность... как сделать ,чтоб файл нормально записался???
у меня немного по сложнее трабл , я отсылаю файл по запросу, а не принимаю ... Принимает же обычный браузер... считываю же файл для отправки сразу потоком: TFileStream *fs=new TFileStream(MyFile,fmOpenRead); ResponseInfo->ContentStream=fs; //где ResponseInfo - ответ на запрос... забавно, но если убрать строчку : ResponseInfo->Headers->Add("Content-Disposition: attachment; filename=MyFile.exe\r\n"); , то файл сохранится правильно, но под кривым именем и без расширения...
... и опять я сам во всем разобрался , строка ResponseInfo->Headers->Add("Content-Disposition: attachment; filename=MyFile.exe\r\n"); при добавке первого нового хедера сама формирует остальные , причем вырезать их никак... Выход нашел в такой же степени дурацкий, в какой и гениальной: в к Content-type прибавляем свою строку с пробелами...(тоесть не используем метод Headers->Add) ResponseInfo->ContentType=IdHTTPServer1->MIMETable->GetFileMIMEType(MyFile) + "\r\nContent-Disposition: attachment; filename=" + MyFile; при этом никаких символов новых строк в конце, иначе они запишутся в отсылаемый файл... ...блин , пол вечера убил на это...
sys32, Tools -> Options -> Directories, выбери Executable Files, cl.exe должен находиться в одной из директорий, если нет, то укажи её.
Вот такой вот вопросик возник: Нужно динамически выделить память. Но, без всяких malloc, calloc , new и т.д. Вот.
Смотри: Code: #include "vcl.h" #include "stdio.h" DynamicArray <int> massiv; //Динамический массив int main() { massiv.set_length(10); //Устанавливаем размер массива for (int i = 0; i < massiv.Length; i++) { massiv[i] = i; printf("%d ",massiv[i]); } getchar(); }
Я показал, как сделать это максимально абстрактно... Если и это не то, то хз. Code: Но, без всяких malloc, calloc , new и т.д Действительно, а как тогда? Это основные методы, чем они так не устраивают? Если возникают сложности, переходи на Делфи, там с этим на порядок легче (SetLength и попер)
наверно он не знает, что в с++ есть стандартные контейнеры, поэтому и предлагает всякое платформа-зависимое дерьмо.
sni4ok, возможно =) ну это не дерьмо, когда нужно писать системные проги, просто оно нужно для другого. зы. только это не часть С++, это stl. большая разница
Какие проблемы? Можно писать с vcl, можно без (третьего не дано, из теории вероятности А + не А = 1). Если проект использует vcl, почему бы не воспользоваться достаточно удобным способом создания динамических массивов любого типа данных (нужно, кстати, подключить sysdyn.h)? Если прога консольно, то ясен пень подключать vcl.h смысла нет. Написал для примера