Форум программистов, компьютерный форум CyberForum.ru

Получение информации с сайта - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Двойное объявление класса http://www.cyberforum.ru/cpp-beginners/thread934328.html
Для чего два раза писать class Animal? class Animal; void setValue (Animal&, int); class Animal { public: Animal(); ~Animal();
C++ Работа со списками Помогите пожалуйста с лабораторной работой: "Файл содержит следующую информацию (построчно): фамилия, имя, отчество. Считать файл в список таким образом, чтобы он оставался отсортирован по фамилиям (при совпадении фамилий - по именам; при совпадении и фамилий и имен - по отчествам). Вывести список фамилий на экран. Ввести с клавиатуры начальные буквы фамилии, имени и отчества и проверить, есть... http://www.cyberforum.ru/cpp-beginners/thread934320.html
Разделение слов на слоги C++
Мне нужно написать программу для деления слов на слоги по определенным правилам. Пока что столкнулся с проблемой цикла. Для одного слова программа работает, но при попытке зациклить вылетает с ошибкой аля "выход за пределы строки". Но не могу понять почему. Код: #include <iostream> #include <string> #include <fstream> using namespace std; int main() { setlocale(LC_ALL,"Russian"); /*...
C++ рекурсивный алгоритм и использование точности "Эпсилон"
Нихао всем) Тут такое дело. Нужно построить рекурсивный алгоритм, который бы возводил число "е" (экспоненту) в степень. Степень должна вводиться к клавиатуры. Но это не самое сложное: нужна еще точность "Эпсилон", которая тоже задается с клавиатуры. Допустим нужно вычислить "е^4", так мы "4" вводим с клавы, да еще и вводим точность, с которой будет выполняться возведение в степень (допустим с...
C++ Массив ссылок на функции http://www.cyberforum.ru/cpp-beginners/thread934259.html
Объясните где ошибка: #include <iostream> void minimum (int*,int); void maximum (int*,int); void average (int*,int); int main() { setlocale(LC_CTYPE, "rus"); // русский язык в консоли
C++ Как напечатать содержимое окна windows forms? Помогите, мне надо, чтобы после нажатия на кнопку печаталось окно Windows Forms. Как это можно сделать? подробнее

Показать сообщение отдельно
noeine
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 45
06.08.2013, 18:41  [ТС]     Получение информации с сайта
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <Windows.h>
#include <WinInet.h>
#pragma comment ( lib, "Wininet.lib" )
 
#include<iostream>
#include<cstring>
 
 
using namespace std;
int main(){
HINTERNET connect = InternetOpen("MyBrowser",INTERNET_OPEN_TYPE_PRECONFIG,NULL, NULL, 0);
 
   if(!connect){
      cout<<"Connection Failed or Syntax error";
      return 0;
   }
 
HINTERNET OpenAddress = InternetOpenUrl(connect,"http://www.myip.ru/ru-RU/index.php", NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE|INTERNET_FLAG_KEEP_CONNECTION, 0);
 
   if ( !OpenAddress )
   {
      DWORD ErrorNum = GetLastError();
      cout<<"Failed to open URL \nError No: "<<ErrorNum;
      InternetCloseHandle(connect);
      system("pause");
      return 0;
   }
 
   char DataReceived[4096]={0}; //Определение массива заведомо бОльшего размера, заполненного нулями.
   
   DWORD NumberOfBytesRead = 0; //ну типа скидываем количество засосанных байтов на 0, хотя в справке написано что функция сама сбрасывает их на 0 перед началом работы
   int counter=0; //Инициализируем счетчик, в который потом будет записано содержимое NumberOfBytesRead (количество прочитанных байтов)
   while(InternetReadFile(OpenAddress, DataReceived, 4095, &NumberOfBytesRead) && NumberOfBytesRead ) //Скачиваем ответ сервера, заведомо на 1 байт меньше максимального размера буффера
   {
        //cout << DataReceived << endl;
        counter += NumberOfBytesRead;
   }
   DataReceived[counter] = 0; //После того как мы считали информацию, записываем в последний считанный байт 0
   cout << DataReceived ; //Выводим полученную информацию
 
   InternetCloseHandle(OpenAddress); 
   InternetCloseHandle(connect);
   system("pause");
}
На данный момент у меня читается исходный код страницы, в массиве при выводе в консоль отсутствует мусор, подскажите мне еще следующий момент:
Функцией InternetReadFile я считал количество байт, которое помещено в переменную NumberOfBytesRead, далее я записываю значение этой переменной в переменную couter определенную до цикла while. Делаю я запись в другую переменную т.к. за пределами цикла while NumberOfBytesRead мне не видна. И далее руководствуясь полученным значением присваиваю элементу массива.
C++
1
DataReceived[counter] = 0;
Я правильно понимаю что этим действием за "завершаю" массив, что в далеком будущем мне поможет избежать таких вещей как "Переполнение буфера"?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru