Просмотр полной версии : [Вопрос] string
Безопасно ли возвращать стринг таким способом?
stock GetVehicleModelName(model, name[], size = sizeof(name))
{
if (!(400 < model < 611)) {
return -1;
}
return strunpack(name, gVehicleInfo[model - 400][e_zviName], size);
}
P.S. Видел в инклуде "zvehinfo" от ziggi
punkochel
19.11.2020, 12:21
Безопасно ли возвращать стринг таким способом?
stock GetVehicleModelName(model, name[], size = sizeof(name))
{
if (!(400 < model < 611)) {
return -1;
}
return strunpack(name, gVehicleInfo[model - 400][e_zviName], size);
}
P.S. Видел в инклуде "zvehinfo" от ziggi
Это всё равно что:
stock GetVehicleModelName(model, name[], size = sizeof(name))
{
if (!(400 < model < 611)) {
return -1;
}
strunpack(name, gVehicleInfo[model - 400][e_zviName], size);
return 1;
}
Просто в случае реализации функции у ziggi, возвращает не просто 1, а длину распакованной строки.
Здесь же по сути ты в функцию передаешь массив, который заполняется данными.
Например, в этом варианте все элементы массива value станут равны 1:
stock OtherFunction() {
new value[10];
for(new i; i < sizeof(value); i++)
printf("value[%i] = %i", i, value[i]); // Тут все элементы будут равны 0;
GetData(value);
for(new i; i < sizeof(value); i++)
printf("value[%i] = %i", i, value[i]); // Тут все элементы будут равны 1;
return 1;
}
stock GetData(array[], size = sizeof(array)) {
for(new i; i < size; i++) {
array[i] = 1;
}
return 1;
}
Строка которую ты используешь, она не создается заново, а передается ссылка в параметре name. Грубо говоря выходит так:
new string[32]; // - Вот ты создал массив(строку)
GetVehicleModelName(562, string);
stock GetVehicleModelName(model, name[], size = sizeof(name)) // - И тут в параметре "name" ссылка на массив "string"
{
if (!(400 < model < 611)) {
return -1;
}
return strunpack(name, gVehicleInfo[model - 400][e_zviName], size);
}
Так работают параметры массивы в pawn, но обычные переменные дублируются. Например в твоем параметре model если изменить значение, то оно заменится только в функции, а если изменить значение name, то изменится значение массива string.
И если что ты возвращаешь через return не массив, а количество символов.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot