Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для TheMallard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    217
    Репутация:
    39 ±

    warning 224: indeterminate array size in "sizeof" expression (symbol "")

    Код:
    source\themallards\utils.inc(23) : warning 224: indeterminate array size in "sizeof" expression (symbol "")
    Собственно, ошибка заключается в функции логгирования.

    PHP код:
    stock Log(const filename[], const message[])
    {
        static const 
    fmt_str[] =
            
    "\r\n[%02d/%02d/%02d %02d:%02d:%02d] %s %s";
        new 
    File:filehandle,
            
    string[sizeof(fmt_str) + sizeof(message)], // строка 23
            
    year,
            
    month,
            
    day,
            
    hour,
            
    minute,
            
    second;
        if(!(
    filehandle fopen(filenameio_append)))
            return -
    1;
        
    getdate(yearmonthday);
        
    gettime(hourminutesecond);
        
    format(stringsizeof(string), fmt_str,
            
    yearmonthdayhourminutesecondmessage);
        for(new 
    idx 0length strlen(string); idx lengthidx++)
            
    fputchar(filehandlestring[idx], false);
        return 
    fclose(filehandle);

    Последний раз редактировалось TheMallard; 05.04.2016 в 12:09.

  2. #2
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    PHP код:
    stock Log(const filename[], const message[])
    {
        static const 
    fmt_str[] =
            
    "\r\n[%02d/%02d/%02d %02d:%02d:%02d] %s";
        new 
    File:filehandle,
            
    string[sizeof(fmt_str) + (-6) + (-127)],
            
    // 127 - максимальная длина ввода текста
            
    year,
            
    month,
            
    day,
            
    hour,
            
    minute,
            
    second;

        if(!(
    filehandle fopen(filenameio_append)))
            return -
    1;
        
    getdate(yearmonthday);
        
    gettime(hourminutesecond);
        
    format(stringsizeof(string), fmt_str,
            
    yearmonthdayhourminutesecondmessage);
        for(new 
    idx 0length strlen(string); idx lengthidx++)
            
    fputchar(filehandlestring[idx], false);
        return 
    fclose(filehandle);


  3. #3
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Ошибка заключалась в том, что вы используете оператор sizeof для аргумента функции.

    Можно было сделать так:
    PHP код:
    stock Log(const filename[], const message[128])
    {
        static const 
    fmt_str[] = "\r\n[%02d/%02d/%02d %02d:%02d:%02d] %s";
        new 
    File:filehandle,
            
    string[sizeof fmt_str + (-6) + (-sizeof message)],
            
    year,
            
    month,
            
    day,
            
    hour,
            
    minute,
            
    second;

        if(!(
    filehandle fopen(filenameio_append)))
            return -
    1;
        
    getdate(yearmonthday);
        
    gettime(hourminutesecond);
        
    format(stringsizeof(string), fmt_str,
            
    yearmonthdayhourminutesecondmessage);
        for(new 
    idx 0length strlen(string); idx lengthidx++)
            
    fputchar(filehandlestring[idx], false);
        return 
    fclose(filehandle);

    Но если вам непринципиален размер строки, т.е. нет никаких ограничений, то можно сделать так:
    PHP код:
    stock Log(const filename[], const message[], size sizeof message)
    {
        static const 
    fmt_str[] = "\r\n[%02d/%02d/%02d %02d:%02d:%02d] %s";
        new 
    File:filehandle,
            
    string[sizeof fmt_str + (-6) + (-size)],
            
    year,
            
    month,
            
    day,
            
    hour,
            
    minute,
            
    second;

        if(!(
    filehandle fopen(filenameio_append)))
            return -
    1;
        
    getdate(yearmonthday);
        
    gettime(hourminutesecond);
        
    format(stringsizeof(string), fmt_str,
            
    yearmonthdayhourminutesecondmessage);
        for(new 
    idx 0length strlen(string); idx lengthidx++)
            
    fputchar(filehandlestring[idx], false);
        return 
    fclose(filehandle);

    Последний раз редактировалось VVWVV; 05.04.2016 в 17:15.

  4. Пользователь сказал cпасибо:
    L0ndl3m (05.04.2016)
  5. #4
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Ошибка заключалась в том, что вы используете оператор sizeof для аргумента функции.

    Можно было сделать так:
    PHP код:
    // ... 
    В таком случае следует выделять 128 символов, т.к. 127 я выделял по причине того, что sizeof автоматически добавляет единицу к конечному размеру строки.

  6. Пользователь сказал cпасибо:
    VVWVV (05.04.2016)
  7. #5
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Но если вам непринципиален размер строки, т.е. нет никаких ограничений, то можно сделать так:
    PHP код:
    stock Log(const filename[], const message[], size sizeof message)
    {
        static const 
    fmt_str[] = "\r\n[%02d/%02d/%02d %02d:%02d:%02d] %s";
        new 
    File:filehandle,
            
    string[sizeof fmt_str + (-6) + (-size)],
            
    year,
            
    month,
            
    day,
            
    hour,
            
    minute,
            
    second;

        if(!(
    filehandle fopen(filenameio_append)))
            return -
    1;
        
    getdate(yearmonthday);
        
    gettime(hourminutesecond);
        
    format(stringsizeof(string), fmt_str,
            
    yearmonthdayhourminutesecondmessage);
        for(new 
    idx 0length strlen(string); idx lengthidx++)
            
    fputchar(filehandlestring[idx], false);
        return 
    fclose(filehandle);

    Не прокатит, размер массива должен быть константой
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  8. #6
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Не прокатит, размер массива должен быть константой
    Спасибо.
    Последний раз редактировалось VVWVV; 06.04.2016 в 20:21.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •