Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 6 из 6
  1. #1
    Аватар для TheMallard
    Пользователь

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

    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
    Аватар для Londlem
    Модератор

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Сообщений
    1,360
    Репутация:
    767 ±
    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
    Сообщений
    607
    Репутация:
    289 ±
    Ошибка заключалась в том, что вы используете оператор 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пасибо:
    Londlem (05.04.2016)
  5. #4
    Аватар для Londlem
    Модератор

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

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

  6. Пользователь сказал cпасибо:
    VVWVV (05.04.2016)
  7. #5
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,662
    Репутация:
    2145 ±
    Цитата Сообщение от 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);

    Не прокатит, размер массива должен быть константой
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  8. #6
    Аватар для VVWVV
    Проверенный

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

 

 

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

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

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

Ваши права

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