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

    Статус
    Оффлайн
    Регистрация
    08.08.2018
    Сообщений
    59
    Репутация:
    2 ±

    Строки-массивы и символы-ячейки

    Hello, World! Не обессудьте столь примитивный вопрос, но как грамотно придать строке значение другой строки? Например, есть строка new name[MAX_PLAYER_NAME] и значения у нее нет. Тогда все просто, name=GetPlayerName(playerid); Но если там уже присутствует значение, почему-то не получается так просто приравнять, хотя по идее массивы можно приравнивать, если типы и размеры совпадают. Кто-то делает через функции строк strmid, strins и тд, кто-то через format, а мне бы хотелось знать наиболее грамотный вариант. И да, имеет ли значение то, что сама name находится в массиве (наподобие player_info)?

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

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Прошу прощения.

    PHP код:
    public OnGameModeInit()
    {
        new 
    str[23];
        
    replace_string(str"Это шутка");
        print(
    str);
        return 
    1;
    }

    stock replace_string(string1[], const string2[], const size1 sizeof(string1), const size2 sizeof(string2))
    {
        new
            
    size size1,
            
    count
        
    ;
        if(
    size size2size size2;
        for(new 
    isizei++)
        {
            if(
    string2[i] == '\0') break;
            
    string1[i] = string2[i];
            
    count++;
        }
        
    string1[count] = '\0';
        return 
    count 1;

    Последний раз редактировалось Seviel; 24.11.2018 в 14:44.

  3. #3
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Seviel Посмотреть сообщение
    Прошу прощения.

    PHP код:
    public OnGameModeInit()
    {
        new 
    str[23];
        
    replace_string(str"Это шутка");
        print(
    str);
        return 
    1;
    }

    stock replace_string(string1[], const string2[], const size1 sizeof(string1), const size2 sizeof(string2))
    {
        new
            
    size size1,
            
    count
        
    ;
        if(
    size size2size size2;
        for(new 
    isizei++)
        {
            if(
    string2[i] == '\0') break;
            
    string1[i] = string2[i];
            
    count++;
        }
        
    string1[count] = '\0';
        return 
    count 1;

    А strcat, strins, format и прочие функции для работы со строками нынче вне закона?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А strcat, strins, format и прочие функции для работы со строками нынче вне закона?
    Я велосипедист.

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

    Статус
    Оффлайн
    Регистрация
    08.08.2018
    Сообщений
    59
    Репутация:
    2 ±
    Вот я и спрашиваю, почему для строк нужно использовать подобные команды, в то время как целочисленные массивы, каковыми строки и являются, можно приравнивать обычным выражением a=b

  7. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Josan_Solomon Посмотреть сообщение
    Вот я и спрашиваю, почему для строк нужно использовать подобные команды, в то время как целочисленные массивы, каковыми строки и являются, можно приравнивать обычным выражением a=b
    Эмм, в Pawn строки - те же самые целочисленные массивы. И приравнивание действует по тем же правилам: если массив, в который идёт запись, размером больше или равен массиву, значения которого записываются, то запись произойдёт. Иначе компилятор ругнётся на то, что размер первого массива слишком мал.

    То бишь:
    1. //Не ок
    2. new array1[7] = "DeimoS";
    3. new array2[6];
    4. array2 = array1;
    5. printf("|%s|%s|", array1, array2);


    1. //Ок
    2. new array1[7] = "DeimoS";
    3. new array2[7];
    4. array2 = array1;
    5. printf("|%s|%s|", array1, array2);


    1. //Ок
    2. new array1[7] = "DeimoS";
    3. new array2[142];
    4. array2 = array1;
    5. printf("|%s|%s|", array1, array2);
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  8. #7
    Аватар для Josan_Solomon
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.08.2018
    Сообщений
    59
    Репутация:
    2 ±
    Но через какое-то количество перезаписываний строки она вдруг просто перестанет записываться. У вас такого не было? Когда приходится пользоваться функциями для изменения значений глобальных строк

  9. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Скорее всего проблема в коде, а не в перезаписи
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

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

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

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

Ваши права

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