The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
компиляция функции проходит с ошибками, !*! ligurio, 13-Апр-06, 21:11  [смотреть все]
есть такая функция:

char* strget(char *par,const char *find,WORD maxl,char end,bool argparsing)
{
    char* par;
    const char* find;
    WORD maxl;
    char end;
    bool argparsing;
    bool bZend = false;
    char *res, *rres;
    char *s, *x;
    char a, b;
    if(par == NULL) return NULL;
    if(find == NULL) return NULL;
    if((s = strstr(par, find)) == NULL) return NULL;
    if(bZend = ((x = strchr(s, end)) == NULL))
        x = strchr(s, 0);
    else
        *x = 0; // temporary change '&' to '\0'
    rres = res = (char *)malloc(maxl + 1);
    s = s + strlen(find);
    if(argparsing) {
        while(*s != '\0' && res - rres < maxl) {
            if(*s == '%' && x > s + 2) {
                if((a = parsesym(*(s + 1))) == 20) {
                    s++; continue; // ignore invalid %
                }
                if((b = parsesym(*(s + 2))) == 20) {
                    s++; continue; // ignore invalid %
                }
                *res = (char)(a*16 + b);
                s+=2;
            }
            else if(*s == '+') *res = ' ';
            else *res = *s;
            res++;
            s++;
        }
        *res = 0;
        rres = (char*)realloc(rres, strlen(rres) + 1);
    }
    else {
        strncpy(rres, s, maxl);
        rres[maxl] = 0;    // fix for any string
    }
    if(!bZend)
        x = end;
    return rres;
}

она разбирает строку ввода в CGI приложении.
Но она не хочет компилироваться в Linux. Причем в приложении, откуда выдрана функция ошибок никаких не выдается, а когда вставляю ее в свою программу сыпятся непонятные ошибки:

estet@qa-debian:~/traintimetable/t41$ make
g++ -O2 -fno-exceptions -DUSE_LIB=0 -Wcomment   -c -o t3.o t3.c
In file included from t3.c:8:
cgi.h:108:7: warning: no newline at end of file
In file included from t3.c:10:
design.h:62:141: warning: no newline at end of file
t3.c:138: error: type specifier omitted for parameter `WORD'
t3.c:138: error: parse error before `,' token
t3.c: In function `char* strget(...)':
t3.c:142: error: `WORD' undeclared (first use this function)
t3.c:142: error: (Each undeclared identifier is reported only once for each
   function it appears in.)
t3.c:142: error: parse error before `;' token
t3.c:156: error: `maxl' undeclared (first use this function)
t3.c:183: error: invalid conversion from `char' to `char*'
t3.c: In function `CTime* GetCurrentTime()':
t3.c:280: warning: address of local variable `current_time' returned
t3.c: In function `int LastModificationOf(const char*)':
t3.c:298: error: 'struct stat' has no member named 'st_mtimespec'
make: *** [t3.o] Ошибка 1

Помогите понять в чем дело!

  • компиляция функции проходит с ошибками, !*! Hordi, 22:34 , 13-Апр-06 (1)
    >char* strget(char *par,const char *find,WORD maxl,char end,bool argparsing)
    >{
    > char* par;
    Корявая функция... Смотри: параметр и сразу переменная с таким же именем объявлена... WORD на int замени...
    • компиляция функции проходит с ошибками, !*! ligurio, 13:31 , 14-Апр-06 (2)
      >>char* strget(char *par,const char *find,WORD maxl,char end,bool argparsing)
      >>{
      >> char* par;
      >Корявая функция... Смотри: параметр и сразу переменная с таким же именем объявлена...
      >WORD на int замени...

      это я потом уже дописал объявление переменных в функции, потому что компилятор ругался, что переменные-параметры необъявлены. Если написать так:

      char* strget(char *par,const char *find,WORD maxl,char end,bool argparsing)
      {
          bool bZend = false;
          char *res, *rres;
          char *s, *x;
          char a, b;
          if(par == NULL) return NULL;
          if(find == NULL) return NULL;
          if((s = strstr(par, find)) == NULL) return NULL;
          if(bZend = ((x = strchr(s, end)) == NULL))
              x = strchr(s, 0);
          else
              *x = 0; // temporary change '&' to '\0'
          rres = res = (char *)malloc(maxl + 1);
          s = s + strlen(find);
          if(argparsing) {
              while(*s != '\0' && res - rres < maxl) {
                  if(*s == '%' && x > s + 2) {
                      if((a = parsesym(*(s + 1))) == 20) {
                          s++; continue; // ignore invalid %
                      }
                      if((b = parsesym(*(s + 2))) == 20) {
                          s++; continue; // ignore invalid %
                      }
                      *res = (char)(a*16 + b);
                      s+=2;
                  }
                  else if(*s == '+') *res = ' ';
                  else *res = *s;
                  res++;
                  s++;
              }
              *res = 0;
              rres = (char*)realloc(rres, strlen(rres) + 1);
          }
          else {
              strncpy(rres, s, maxl);
              rres[maxl] = 0;    // fix for any string
          }
          if(!bZend)
              x = end;
          return rres;
      }

      То все равно не компилируется.

  • компиляция функции проходит с ошибками, !*! Сергей, 14:11 , 14-Апр-06 (3)
    >estet@qa-debian:~/traintimetable/t41$ make
    >g++ -O2 -fno-exceptions -DUSE_LIB=0 -Wcomment   -c -o t3.o t3.c
    >In file included from t3.c:8:
    >cgi.h:108:7: warning: no newline at end of file
    >In file included from t3.c:10:
    >design.h:62:141: warning: no newline at end of file
    >t3.c:138: error: type specifier omitted for parameter `WORD'
    >t3.c:138: error: parse error before `,' token
    >t3.c: In function `char* strget(...)':
    >t3.c:142: error: `WORD' undeclared (first use this function)
    >t3.c:142: error: (Each undeclared identifier is reported only once for each
    >   function it appears in.)

    Проблема в том, что у тебя не объявлен тип WORD. Определи его #define WORD unsigned int или unsigned short int, как тебе нужно.

    >t3.c:142: error: parse error before `;' token
    >t3.c:156: error: `maxl' undeclared (first use this function)
    >t3.c:183: error: invalid conversion from `char' to `char*'
    >t3.c: In function `CTime* GetCurrentTime()':
    >t3.c:280: warning: address of local variable `current_time' returned
    >t3.c: In function `int LastModificationOf(const char*)':
    >t3.c:298: error: 'struct stat' has no member named 'st_mtimespec'
    >make: *** [t3.o] Ошибка 1
    >
    >Помогите понять в чем дело!

    Что-то выдергивать и других приложений нужно внимательно.

  • компиляция функции проходит с ошибками, !*! Сергей, 14:25 , 14-Апр-06 (4)
    Вот я такое скомпилил командой g++ -c <filename>:

    Вот на эту строку ругался, что не может преобразовать char к char*:
    if(!bZend)
       x = end;

    Смотри типы лучше.

    #include <stdlib.h>
    #include <string.h>

    #define WORD unsigned int

    char parsesym(char ch)
    {
      return ch;
    }

    char* strget(char *par,const char *find,WORD maxl,char end,bool argparsing)
    {
        bool bZend = false;
        char *res, *rres;
        char *s, *x;
        char a, b;
        if(par == NULL) return NULL;
        if(find == NULL) return NULL;
        if((s = strstr(par, find)) == NULL) return NULL;
        if(bZend = ((x = strchr(s, end)) == NULL))
            x = strchr(s, 0);
        else
            *x = 0; // temporary change '&' to '\0'
        rres = res = (char *)malloc(maxl + 1);
        s = s + strlen(find);
        if(argparsing) {
            while(*s != '\0' && res - rres < maxl) {
                if(*s == '%' && x > s + 2) {
                    if((a = parsesym(*(s + 1))) == 20) {
                        s++; continue; // ignore invalid %
                    }
                    if((b = parsesym(*(s + 2))) == 20) {
                        s++; continue; // ignore invalid %
                    }
                    *res = (char)(a*16 + b);
                    s+=2;
                }
                else if(*s == '+') *res = ' ';
                else *res = *s;
                res++;
                s++;
            }
            *res = 0;
            rres = (char*)realloc(rres, strlen(rres) + 1);
        }
        else {
            strncpy(rres, s, maxl);
            rres[maxl] = 0;    // fix for any string
        }
        if(!bZend)
            x = &end;
        return rres;
    }

    int main()
    {
      return 0;
    }




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру