[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Roston

    Roston Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    337
    Likes Received:
    104
    Reputations:
    8
    ну вот будет даваццо масив.... и его надо будет сортировать несколько раз... суть в том что сортировка будет каждый раз происходить не с 0 елемента а с какого нить другого, и заканчиваццо не последним а заданым... и каждый раз один елемент(сам уже сделаю) будет заносиццо в другой масив.... при следующей сортировки один елемент опять же будет заносиццо в масив созданый при первой сортировке.....
    почему указатели??? потому что при перврй сортировке собьеться порядок елементов.... а при каждой следующей надо сохранять самый первый, тобишь исходный порядок.... так яснее?
     
  2. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    А в чем проблема? Просто в цикле сортировки к указателю прибавляешь i, чтобы получать следующий элемент. А так тоже самое.
     
  3. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    что не правельно в этом запросе? отсылаю его на сервер, а от сервера ни ответа ни привета
    Code:
    char *query=(char*)malloc(2048);
    
        strcpy(query,"POST /");
        strcat(query,http_path);
        strcat(query," HTTP/1.0\nHost: ");
        strcat(query,http_host);
        strcat(query,"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 \r\n");
    strcat(query,"Accept-Language: ru,en-us;q=0.7,en;q=0.3 \r\n");
    strcat(query,"Accept-Encoding: gzip,deflate \r\n");
    strcat(query,"Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 \r\n");
    strcat(query,"Keep-Alive: 300 \r\n");
    strcat(query,"Connection: keep-alive \r\n");
    strcat(query,"Content-Type: application/x-www-form-urlencoded; charset=UTF-8 \r\n");
    strcat(query,"X-Requested-With: XMLHttpRequest \r\n");
    strcat(query,"Referer: http://vkontakte.ru/index.php \r\n");
    strcat(query,"Content-Length: 65 \r\n");
    strcat(query,"Cookie: remixlang=0; remixchk=5; remixautobookmark=14; remixclosed_tabs=64; lang=0; remixgroup_closed_tabs=0 \r\n");
    strcat(query,"Pragma: no-cache \r\n");
    strcat(query,"Cache-Control: no-cache \r\n");
    strcat(query,"op=a_login_attempt&email=mail%40mail.ua&pass=123456&expire=0");
     
  4. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Толку с такой замены не будет

    Целиком код покажи, и перед данными post запроса должен стоять двойной перенос строки
     
    _________________________
  5. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    вот весь код
    Code:
    #include <windows.h>
    
    #include <stdio.h>
    #include <string.h>
    #pragma comment(lib, "ws2_32.lib")
    
    char* OpenURL(char *url) {
        WSADATA lpWSAData;
        SOCKET s;
    
        // Проверим на правильность введенный адрес.
        // Он должен начинаться с "http://"
        if (memcmp(url,"HTTP://",7)!=0 && memcmp(url,"http://",7)!=0) return(NULL);
        url+=7;
    
        // Инициализация библиотеки Ws2_32.dll.
        if (WSAStartup(MAKEWORD(1,1),&lpWSAData)!=0) return(NULL);
    
    
        // Получим имя хоста, номер порта и путь ----------------------------
    
        char *http_host=strdup(url); // Имя хоста (HTTP_HOST)
        int port_num=80;             // Номер порта по умолчанию (HTTP_PORT)
        char *http_path=NULL;        // Путь (REQUEST_URI)
    
        char *pch=strchr(http_host,':');
        if (!pch) {
            pch=strchr(http_host,'/');
            if (pch) {
                *pch=0;
                http_path=strdup(pch+1);
                }
            else http_path=strdup("");
            }
        else {
            *pch=0;pch++;
            char *pch1 = strchr(pch,'/');
            if (pch1) {
                *pch1=0;
                http_path=strdup(pch1+1);
                }
            else http_path=strdup("");
    
            port_num = atoi(pch);
    
            if (port_num==0) port_num = 80;
            }
    
        // Поучаем IP адрес по имени хоста
        struct hostent* hp;
        if (!(hp=gethostbyname(http_host))) {
            free(http_host);
            free(http_path);
            return(NULL);
            }
    
        // Открываем сокет
        s=socket(AF_INET, SOCK_STREAM, 0);
        if (s==INVALID_SOCKET) {
            free(http_host);
            free(http_path);
            return(NULL);
            }
    
        // Заполняем структуру sockaddr_in
        struct sockaddr_in ssin;
        memset ((char *)&ssin, 0, sizeof(ssin));
        ssin.sin_family = AF_INET;
        ssin.sin_addr.S_un.S_un_b.s_b1 = hp->h_addr[0];
        ssin.sin_addr.S_un.S_un_b.s_b2 = hp->h_addr[1];
        ssin.sin_addr.S_un.S_un_b.s_b3 = hp->h_addr[2];
        ssin.sin_addr.S_un.S_un_b.s_b4 = hp->h_addr[3];
        ssin.sin_port = htons(port_num);
    
        // Выводим IP адрес хоста, с которым будем соединятся
        printf("Conecting to %d.%d.%d.%d...",(unsigned char)hp->h_addr[0],
                                             (unsigned char)hp->h_addr[1],
                                             (unsigned char)hp->h_addr[2],
                                             (unsigned char)hp->h_addr[3]);
    
        // Соединяемся с хостом
        if (connect(s, (sockaddr *)&ssin, sizeof(ssin))==-1) {
            free(http_host);
            free(http_path);
            printf("Error\n");
            return(NULL);
            }
        printf("Ok\n");
    
        // Формируем HTTP запрос
        char *query=(char*)malloc(2048);
    
        strcpy(query,"POST /");
        strcat(query,http_path);
        strcat(query," HTTP/1.0\nHost: ");
        strcat(query,http_host);
        strcat(query,"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 \r\n");
    strcat(query,"Accept-Language: ru,en-us;q=0.7,en;q=0.3 \r\n");
    strcat(query,"Accept-Encoding: gzip,deflate \r\n");
    strcat(query,"Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 \r\n");
    strcat(query,"Keep-Alive: 300 \r\n");
    strcat(query,"Connection: keep-alive \r\n");
    strcat(query,"Content-Type: application/x-www-form-urlencoded; charset=UTF-8 \r\n");
    strcat(query,"X-Requested-With: XMLHttpRequest \r\n");
    strcat(query,"Referer: http://vkontakte.ru/index.php \r\n");
    strcat(query,"Content-Length: 65 \r\n");
    strcat(query,"Cookie: remixlang=0; remixchk=5; remixautobookmark=14; remixclosed_tabs=64; lang=0; remixgroup_closed_tabs=0 \r\n");
    strcat(query,"Pragma: no-cache \r\n");
    strcat(query,"Cache-Control: no-cache \r\n");
    strcat(query,"op=a_login_attempt&email=mail%40mail.ua&pass=password&expire=0");
    
        // Выводим HTTP запрос
        printf("%s",query);
    
        // Отправляем запрос серверу
        int cnt=send(s,query,strlen(query),0);
    
        // Освобождаем память
        free(http_host);
        free(http_path);
        free(query);
    
        // Проверяем, не произошло ли ошибки при отправке запроса на сервер
         if (cnt==SOCKET_ERROR) return(NULL);
    
        cnt=1;
    
        // Получаем ответ с сервера ---------------------------------
    
        int size=1024*1024; // 1Mb
        char *result=(char*)malloc(size);
        strcpy(result,"");
        char *result_ptr=result;
    
        while (cnt!=0 && size>0) {
            cnt=recv (s, result_ptr, sizeof(size),0);
            if (cnt>0) {
                result_ptr+=cnt;
                size-=cnt;
                }
            }
        *result_ptr=0;
    
        // Деинициализация библиотеки Ws2_32.dll
        WSACleanup();
    
        return(result);
        }
    
    void main(void) {
    
    
        char URL[1024]="";
    (void)scanf("%s",URL);
    char *result=OpenURL(URL);
    if (result) {
            printf("%s",result);
            free(result);
            }
        else {
            printf("Error # WSABASEERR+%d\n",WSAGetLastError()-WSABASEERR);
            }
       
    	getchar();
    	getchar();
        }
    
     
  6. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Длинна содержимого Post запроса 62, а не 65
    И \r\n\r\n перед содержимым
     
    _________________________
  7. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    по аналогии передаю вот такой вот пакет, и что то опять не правельно :( хелп ми
    Code:
    char *query=(char*)malloc(2048);
    
        strcpy(query,"POST /");
        strcat(query,http_path);
        strcat(query," HTTP/1.0\nHost: ");
        strcat(query,http_host);
        strcat(query,"\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 ");
    strcat(query,"\r\nAccept-Language: ru,en-us;q=0.7,en;q=0.3 ");
    strcat(query,"\r\nAccept-Encoding: gzip,deflate ");
    strcat(query,"\r\nAccept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 ");
    strcat(query,"\r\nKeep-Alive: 300 ");
    strcat(query,"\r\nConnection: keep-alive ");
    strcat(query,"\r\nContent-Type: application/x-www-form-urlencoded; charset=UTF-8 ");
    strcat(query,"\r\nX-Requested-With: XMLHttpRequest ");
    strcat(query,"\r\nReferer: Referer: http://*** ");
    strcat(query,"\r\nContent-Length: 1588");
    strcat(query,"\r\nCookie: remixlang=0; remixchk=5; remixautobookmark=14; remixclosed_tabs=64; lang=0; remixgroup_closed_tabs=0 ");
    strcat(query,"\r\nPragma: no-cache");
    strcat(query,"\r\nCache-Control: no-cache");
    strcat(query,"\r\nsql_query=UPDATE+%60account%60+SET+%60id%60+%3D+%2712%27%2C+%60username%60+%3D+%27Xexe%27%2C+%60sha_pass_hash%60+%3D+%27d7c390a3872b468d05723ded074ce85887b45ea3%27%2C+%60gmlevel%60+%3D+%273%27%2C+%60sessionkey%60+%3D+%271802AD963972B2EEDD19960759F6BDD583BB726E290C1DFDADB90C01FD51BA1F8A356B83608E3C6D%27%2C+%60v%60+%3D+%270%27%2C+%60s%60+%3D+%270%27%2C+%60email%60+%3D+%27Kaka%40meil.ua%27%2C+%60joindate%60+%3D+%272009-03-15+21%3A15%3A43%27%2C+%60last_ip%60+%3D+%27192.168.3.89%27%2C+%60failed_logins%60+%3D+%270%27%2C+%60locked%60+%3D+%270%27%2C+%60last_login%60+%3D+%272009-04-25+22%3A57%3A54%27%2C+%60online%60+%3D+%270%27%2C+%60expansion%60+%3D+%272%27%2C+%60mutetime%60+%3D+%270%27%2C+%60locale%60+%3D+%278%27+WHERE++%60id%60+%3D+%2712%27+AND+%60username%60+%3D+%27Xexe%27+AND+%60sha_pass_hash%60+%3D+%27d7c390a3872b468d05723ded074ce85887b45ea3%27+AND+%60gmlevel%60+%3D+%270%27+AND+%60sessionkey%60+%3D+%271802AD963972B2EEDD19960759F6BDD583BB726E290C1DFDADB90C01FD51BA1F8A356B83608E3C6D%27+AND+%60v%60+%3D+%270%27+AND+%60s%60+%3D+%270%27+AND+%60email%60+%3D+%27Kaka%40meil.ua%27+AND+%60joindate%60+%3D+%272009-03-15+21%3A15%3A43%27+AND+%60last_ip%60+%3D+%27192.168.3.89%27+AND+%60failed_logins%60+%3D+%270%27+AND+%60locked%60+%3D+%270%27+AND+%60last_login%60+%3D+%272009-04-25+22%3A57%3A54%27+AND+%60online%60+%3D+%270%27+AND+%60expansion%60+%3D+%272%27+AND+%60mutetime%60+%3D+%270%27+AND+%60locale%60+%3D+%278%27++LIMIT+1%3B&sql_db=realmdtest&sql_port=3306&sql_server=localhost&sql_passwd=password&sql_login=root&act=sql&sql_act=query&sql_tbl=account&submit=1&sql_goto=&sql_confirm=Yes");
    
     
  8. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Ты меня не так понял видимо. Я имел ввиду что запрос должен выглядеть примерно так

    POST /cgi-bin/auth HTTP/1.0\r\n
    Host: mail.ru\r\n
    Content-type: application/x-www-form-urlencoded\r\n
    Content-length: длинна содержимого\r\n\r\n
    Содержимое
     
    _________________________
  9. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    Это может быть вызвано повреждением кучи и указывает на ошибку в http.exe или в одной из загруженных им DLL.

    Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит http.exe
     
  10. s_p_a_m

    s_p_a_m Elder - Старейшина

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    если не сложно выложи исправленый кусок, ато чет я наверное не допонимаю... ошика лезет...
     
  11. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Code:
        strcpy(query,"POST /");
        strcat(query,http_path);
        strcat(query," HTTP/1.0\nHost: ");
        strcat(query,http_host);
    strcat(query,"\r\nConnection: close \r\n");
    strcat(query,"Content-Type: application/x-www-form-urlencoded; charset=UTF-8 \r\n");
    strcat(query,"Cookie: remixlang=0; remixchk=5; remixautobookmark=14; remixclosed_tabs=64; lang=0; remixgroup_closed_tabs=0 \r\n");
    strcat(query,"Content-Length: 62\r\n\r\n");
    strcat(query,"op=a_login_attempt&email=mail%40mail.ua&pass=password&expire=0");
    
     
    _________________________
  12. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    s_p_a_m, прекоати юзать char* для формирования данных. юзай std::string и оператор +. иначе с таким подходом к расчету требуемой памяти у тебя всегда будут косяки.
     
  13. Msw0rm

    Msw0rm New Member

    Joined:
    22 May 2009
    Messages:
    11
    Likes Received:
    0
    Reputations:
    0
    Как уменьшить размер ехе файла в builber 6 и4 visual c++ 2008 ?
     
  14. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Собери динамически(но прийдется тягать либсы) или юзай какой нибудь упаковщик.
     
  15. Djezul

    Djezul New Member

    Joined:
    8 Dec 2008
    Messages:
    43
    Likes Received:
    2
    Reputations:
    0
    народ у меня такая проблема, как мне лучше реализовать проверку вводит ли пользователь нужные мне символы или другие, у меня 4 варианта, допустим 1,2,3,4 , при вводе другого значения пользователю должны предложить снова ввести символ, пробовал atoi , чёто не получается((
     
  16. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Зачем тебе преобразование? Просто сравнивай строки, например case'ом. Выложи код.
     
  17. Msw0rm

    Msw0rm New Member

    Joined:
    22 May 2009
    Messages:
    11
    Likes Received:
    0
    Reputations:
    0
    3097, а есле на чистом арi то будет работать без библиотек ?
     
  18. Djezul

    Djezul New Member

    Joined:
    8 Dec 2008
    Messages:
    43
    Likes Received:
    2
    Reputations:
    0
    Как зачем преобразование, я ввожу строку а на выходе мне надо чтобы было число 1 или 2 или3 или 4 , при этом если я ввожу не одно из этих чисел мне снова надо дать возможно ввести, и так пока я не введу одно из нужных мне чисел. Было бы логично так
    Code:
    while(true){
     cin>>x;
     y=atoi(x)
     if(y==1||y==2||y==3||y==4){
      break;
     }
     x="";
    }
    
    но атуи чёто не пашет(((
     
  19. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Выложи код целиком. Зачем тебе atoi?
    Ты не можешь сравнивать х и "1"||"2"||"3"||"4"?
    И проставь точки с запятой.
     
  20. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Как без использования условных операторов проверить положительно ли число?
     
Thread Status:
Not open for further replies.