Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Не правильно работает пример на C (mrMoRiC)
Author Message
mrMoRiC
Участник форума



Joined: 16 Jul 2007
Posts: 76
Карма: -2
   поощрить/наказать


PostPosted: Thu Aug 02, 2007 4:43 am (написано за 6 минут 50 секунд)
   Post subject: Не правильно работает пример на C
Reply with quote

В книжке есть тема "Передача параметров методом POST", страница 85. Там автор даёт пример на языке c, для компиляции я использую с++.Net. Прошлый пример откомпилировался нормально, всё работало - претензий нет. А вот тут почему-то работает частично. Далее приведу код.
Код Post формы:
Code (html): скопировать код в буфер обмена
<html> (december.com/html/4/element/html.html)
<head> (december.com/html/4/element/head.html)
  <title> (december.com/html/4/element/title.html)</title>
</head>
<body> (december.com/html/4/element/body.html)
<form (december.com/html/4/element/form.html) method="post" action="cWeKnowAdvan.cgi?param=value"> (december.com/html/4/element/.html)<br> (december.com/html/4/element/br.html)
&nbsp; &nbsp; &nbsp;FirstName:<input (december.com/html/4/element/input.html) name="name1" type="text"> (december.com/html/4/element/.html)<br> (december.com/html/4/element/br.html)
SecondName:<input (december.com/html/4/element/input.html) name="name2" type="text"> (december.com/html/4/element/.html)<br> (december.com/html/4/element/br.html)
<input (december.com/html/4/element/input.html) value="!" type="submit"> (december.com/html/4/element/.html)</form>
</body>
</html>
Код скрипта (script.cgi)
Code (c++): скопировать код в буфер обмена
#include <stdio.h>
#include <stdlib.h>
void main(void){
        char *RemoteAddr = getenv("REMOTE_ADDR");
        char *ContentLength = getenv("CONTENT_LENGTH");
        char *QueryString = getenv("QUERY_STRING");
        int NumBytes = atoi("Content_Length");
        char *Data = (char *)malloc(NumBytes + 1);
        fread(Data,1,NumBytes,stdin);
        Data[NumBytes] = 0;
    printf("Content-type: text/html\n\n");
        printf("<html><body>");
        printf("<h1>Здравствуйте. Мы знаем о Вас всё!</h1>");
        printf("Ваш IP-адрес: %s<br>", RemoteAddr);
        printf("Колличество байтов данных: %d<br>",NumBytes);
        printf("Вот параметры, которые вы указали: %s<br>", Data);
        printf("А вот то, что мы получили через URL: %s",QueryString);
        printf("</body></html>");
        }
По книжному описанию я вбил пару значений (serega, vasa) в поле Post формы, нажал кнопку "Отправить"...
Скрипт script.cgi выдал мне следующее :

Здравствуйте. Мы знаем о Вас всё! ' ОК
Ваш IP-адрес: 127.0.0.1 'OK
Колличество байтов данных: 0 ' Почему это???
Вот параметры, которые вы указали: 'А где serega, vasa???
А вот то, что мы получили через URL: param=value 'OK

Объясните плис.
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Thu Aug 02, 2007 12:22 pm (спустя 7 часов 39 минут; написано за 54 секунды)
   Post subject:
Reply with quote

mrMoRiC wrote:
int NumBytes = atoi("Content_Length");
Здесь кавычки лишние.
Back to top
View user's profile Send private message Send e-mail
mrMoRiC
Участник форума



Joined: 16 Jul 2007
Posts: 76
Карма: -2
   поощрить/наказать


PostPosted: Thu Aug 02, 2007 1:00 pm (спустя 37 минут; написано за 6 минут 19 секунд)
   Post subject:
Reply with quote

Юpий Насрeтдинов wrote:
mrMoRiC wrote:
int NumBytes = atoi("Content_Length");
Здесь кавычки лишние.
Ой=)) Ну я и дал маху, ошибка, ведь детская!=))
Тут даже не кавычки, тут вообще следует изменить ContentLength.
Извините за мою глупость.
Back to top
View user's profile Send private message
mrMoRiC
Участник форума



Joined: 16 Jul 2007
Posts: 76
Карма: -2
   поощрить/наказать


PostPosted: Thu Aug 02, 2007 3:42 pm (спустя 2 часа 42 минуты; написано за 3 минуты 58 секунд)
   Post subject:
Reply with quote

Ещё одна проблемка со скриптами (опять пример скрипта из книги):
Code (c++): скопировать код в буфер обмена
#include <stdio.h>
//
//
//
void UrlDecode(char *st){
        char *p=st; //
        char hex[3];//
        int code;   //
        //
        //
        do{
        //
                if (*st == '%'){//
                        hex[0]=*(++st); hex[1]=*(++st); hex[2]=0;
            //
                sscanf(hex,"%X",&code);
                //
                *p++=(char)code;
                //
                //
                }
                //
                else if (*st='+')*p++=' ';
                //
                else *p++=*st;
        }while(*st++!=0); //
}
Вылетает с ошибкой
error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup LIBCMT.lib
сначала, такой ошибки не было, но была другая: не определялась функция sscanf. Пошёл в Хелп, там написано, что нужно подсоединить <stdio.h> (автор наверно забыл, а может, потому что у меня .NET). После функция определилась, зато появилась ошибка, которую я указал выше. В хелпе про неё написана вообще полная муть, логически сам дойти тоже не могу, тут наверно только опытный человек поймёт. Очень надеюсь на Вас, Юpий Насрeтдинов
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Thu Aug 02, 2007 4:09 pm (спустя 26 минут; написано за 1 минуту 37 секунд)
   Post subject:
Reply with quote

mrMoRiC
Если Вы действительно хотите всерьёз заняться Си, рекомендую купить книгу Кернигана и Ритчи -- ANSI C.
mrMoRiC wrote:
error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup LIBCMT.lib
Эта ошибка означает, что Вы забыли описать функцию main() и, соответственно, программа не запустится вообще, т.к. первой всегда запускается main() :).
Back to top
View user's profile Send private message Send e-mail
mrMoRiC
Участник форума



Joined: 16 Jul 2007
Posts: 76
Карма: -2
   поощрить/наказать


PostPosted: Fri Aug 03, 2007 2:52 am (спустя 10 часов 43 минуты; написано за 1 минуту 56 секунд)
   Post subject:
Reply with quote

Quote:
Если Вы действительно хотите всерьёз заняться Си, рекомендую купить книгу Кернигана и Ритчи -- ANSI C.
Вообще, может и займусь, но сейчас больше интересует PHP. Вопросы тут задаю, потому что привык книги изучать с max дотошностью:)

По поводу ошибки. То есть мне нужно просто добавить в код следующее:
Code (c++): скопировать код в буфер обмена
void main(void){
}
???
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Fri Aug 03, 2007 4:28 pm (спустя 13 часов 35 минут; написано за 1 секунду)
   Post subject:
Reply with quote

Нет, так поступать не нужно, это очень глупо. Читайте книжки...
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML