Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 3 из 3 ПерваяПервая 1 2 3
Показано с 21 по 25 из 25
  1. #21
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    seriu, возможно, следующие слова будут для тебя шоком, но прими их и постарайся со временем их осознать. Слушай. После объявления массива/переменной ее надо использовать, ибо зачем тогда объявлять?


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

    Статус
    Оффлайн
    Регистрация
    29.11.2013
    Сообщений
    69
    Репутация:
    6 ±
    Цитата Сообщение от Untonyst Посмотреть сообщение
    seriu, возможно, следующие слова будут для тебя шоком, но прими их и постарайся со временем их осознать. Слушай. После объявления массива/переменной ее надо использовать, ибо зачем тогда объявлять?


    Untonyst, Возможно для тебя это будет чудом, но когда делаешь так:
    PHP код:
    public OnGameModeInit()
    {
        
    long_string[sizeof(long_string)-1] = '\n';
        
    long_string1[sizeof(long_string1)-1] = '\n';
        
    long_string2[sizeof(long_string2)-1] = '\n';
        
    long_string3[sizeof(long_string3)-1] = '\0';

    Далее мы используем только так
    PHP код:
    printf("%s",long_string); 
    т.е long_string1,long_string2,long_string3 мы НЕЕЕЕЕ используем.

  3. #23
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от seriu Посмотреть сообщение


    Untonyst, Возможно для тебя это будет чудом, но когда делаешь так:
    PHP код:
    public OnGameModeInit()
    {
        
    long_string[sizeof(long_string)-1] = '\n';
        
    long_string1[sizeof(long_string1)-1] = '\n';
        
    long_string2[sizeof(long_string2)-1] = '\n';
        
    long_string3[sizeof(long_string3)-1] = '\0';

    Далее мы используем только так
    PHP код:
    printf("%s",long_string); 
    т.е long_string1,long_string2,long_string3 мы НЕЕЕЕЕ используем.
    long_string1 и long_string2 таки используются из-за присвоения им значений и будут скрепляться.
    Тем не менее, я проверил: если не использовать последний массив (long_string3) (как было подмечено, достаточно записать тот же '\0' в конец строки), то этот массив использоваться не будет, компилятор уберёт его содержимое из секции данных.
    После объединения строк и выводе long_string в лучшем случае после long_string2 ничего не выведется, в худшем - выведется каша из случайных символов или произойдёт краш.
    Как оказалось, трюк с #pragma unused не работает и компилятор удаляет строку, что есть странно, т.к. если использовать эту директиву на локальном массиве, то компилятор не уберёт его и под него будет выделено место в стеке.
    Похоже, что этот трюк с #pragma unused работает только на локальных массивах. Спасибо, что заметили ошибку.
    UPD: Обновил пример кода в посте на 1-й странице.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. 2 пользователя(ей) сказали cпасибо:
    seriu (23.01.2016) VVWVV (23.01.2016)
  5. #24
    Аватар для denis01
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.05.2014
    Сообщений
    70
    Репутация:
    0 ±
    Что обозначает - 1 здесь? [sizeof(long_string)-1]

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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от denis01 Посмотреть сообщение
    Что обозначает - 1 здесь? [sizeof(long_string)-1]
    Так как все строки в памяти разделяются символом '\0' (символ конца строки), и sizeof возвращает размера массива (вместе с этим нулевым символом), то нужно вычитать единицу, дабы не засчитывался этот спец-символ.

 

 
Страница 3 из 3 ПерваяПервая 1 2 3

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

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

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

Ваши права

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