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

Тема: string

  1. #1
    Аватар для Union
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.03.2016
    Сообщений
    36
    Репутация:
    0 ±

    string

    Безопасно ли возвращать стринг таким способом?

    1. stock GetVehicleModelName(model, name[], size = sizeof(name))
    2. {
    3. if (!(400 < model < 611)) {
    4. return -1;
    5. }
    6.  
    7. return strunpack(name, gVehicleInfo[model - 400][e_zviName], size);
    8. }



    P.S. Видел в инклуде "zvehinfo" от ziggi

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

    Статус
    Оффлайн
    Регистрация
    08.12.2018
    Адрес
    Россия
    Сообщений
    146
    Репутация:
    25 ±
    Цитата Сообщение от Union Посмотреть сообщение
    Безопасно ли возвращать стринг таким способом?

    1. stock GetVehicleModelName(model, name[], size = sizeof(name))
    2. {
    3. if (!(400 < model < 611)) {
    4. return -1;
    5. }
    6.  
    7. return strunpack(name, gVehicleInfo[model - 400][e_zviName], size);
    8. }



    P.S. Видел в инклуде "zvehinfo" от ziggi
    Это всё равно что:
    1. stock GetVehicleModelName(model, name[], size = sizeof(name))
    2. {
    3. if (!(400 < model < 611)) {
    4. return -1;
    5. }
    6.  
    7. strunpack(name, gVehicleInfo[model - 400][e_zviName], size);
    8. return 1;
    9. }


    Просто в случае реализации функции у ziggi, возвращает не просто 1, а длину распакованной строки.
    Здесь же по сути ты в функцию передаешь массив, который заполняется данными.




    Например, в этом варианте все элементы массива value станут равны 1:
    1. stock OtherFunction() {
    2.  
    3. new value[10];
    4. for(new i; i < sizeof(value); i++)
    5. printf("value[%i] = %i", i, value[i]); // Тут все элементы будут равны 0;
    6.  
    7. GetData(value);
    8. for(new i; i < sizeof(value); i++)
    9. printf("value[%i] = %i", i, value[i]); // Тут все элементы будут равны 1;
    10.  
    11. return 1;
    12. }
    13.  
    14. stock GetData(array[], size = sizeof(array)) {
    15.  
    16. for(new i; i < size; i++) {
    17.  
    18. array[i] = 1;
    19. }
    20. return 1;
    21. }
    Последний раз редактировалось punkochel; 19.11.2020 в 12:29.

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

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±
    Строка которую ты используешь, она не создается заново, а передается ссылка в параметре name. Грубо говоря выходит так:
    PHP код:
    new string[32]; // - Вот ты создал массив(строку)
    GetVehicleModelName(562string);

    stock GetVehicleModelName(modelname[], size sizeof(name)) // - И тут в параметре "name" ссылка на массив "string"
    {
        if (!(
    400 model 611)) {
            return -
    1;
        }
     
        return 
    strunpack(namegVehicleInfo[model 400][e_zviName], size);

    Так работают параметры массивы в pawn, но обычные переменные дублируются. Например в твоем параметре model если изменить значение, то оно заменится только в функции, а если изменить значение name, то изменится значение массива string.

    И если что ты возвращаешь через return не массив, а количество символов.

 

 

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

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

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

Ваши права

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