PDA

Просмотр полной версии : [Вопрос] Сборник моих вопросов



Sp1ke
17.07.2016, 22:00
Всем привет, задался несколькими вопросами:
1. Для форматирования mysql запроса лучше использовать всегда mysql_format, или в тех ситуациях, когда данные не могут быть изменены пользователем можно использовать обычный format?
2. Как мы все знаем то одна ячейка выделяется под "\0", но я взял в пример ip адрес 255.255.255.255 (15 символов), если сделать такую команду

CMD:teststr(playerid)
{
new ip[15];
format(ip, sizeof(ip), "255.255.255.255");
print(ip);
return true;
}
то в консоли мы получим

[20:55:32] 255.255.255.25
Но ведь запись идет с ip[0], значит 0-14 = 15 символов, и значит ip[15] должно уйти под \0, почему этого не происходит?

VVWVV
17.07.2016, 22:16
1. Насколько я помню, то данные функции практически ничем не отличаются.
2. Нулевой символ помогает определить конец строки в памяти.

Sp1ke
17.07.2016, 22:25
1. Насколько я помню, то данные функции практически ничем не отличаются.
2. Нулевой символ помогает определить конец строки в памяти.

Я понимаю для чего он, но у меня выделено всего 16 ячеек (0-15), 0-14 идет запись ip адреса (пример выше) и 15-ый должен уже выделится под \0, но почему-то в консоль выводит на один символ меньше

VVWVV
17.07.2016, 22:31
Я понимаю для чего он, но у меня выделено всего 16 ячеек (0-15), 0-14 идет запись ip адреса (пример выше) и 15-ый должен уже выделится под \0, но почему-то в консоль выводит на один символ меньше

Кстати, да. Ячеек не хватает. 3 * 4 (255 255 255 255) + 3 (точки) + 1 (\0) = 16 ячеек.

Sp1ke
17.07.2016, 22:34
Кстати, да. Ячеек не хватает. 3 * 4 (255 255 255 255) + 3 (точки) + 1 (\0) = 16 ячеек.

Так у меня и выделено 16 ячеек (0-15 = 16), почему не хватает-то?

VVWVV
17.07.2016, 22:37
Так у меня и выделено 16 ячеек (0-15 = 16), почему не хватает-то?


CMD:teststr(playerid)
{
new ip[15 /* ip адрес */ + 1 /* \0 символ */];
format(ip, sizeof(ip), "255.255.255.255");
print(ip);
return true;
}

Sp1ke
17.07.2016, 22:40
CMD:teststr(playerid)
{
new ip[15 /* ip адрес */ + 1 /* \0 символ */];
format(ip, sizeof(ip), "255.255.255.255");
print(ip);
return true;
}

Я понимаю, но ведь запись идет с 0 ячейки? Значит 0-14 ячейки это уже записывается 255.255.255.255

VVWVV
17.07.2016, 22:44
При инициализации массива указывается количество всего ячеек. 0 - это индекс первого элемента массива.

Sp1ke
17.07.2016, 22:45
При инициализации массива указывается количество всего ячеек. 0 - это индекс первого элемента массива.

Спасибо, ответ получен, прошу закрыть тему

Daniel_Cortez
17.07.2016, 22:59
ИМХО, для формирования запросов лучше всегда использовать mysql_format. На производитнльности это практически не отразится, зато всегда будет гарантия защиты от SQL-инъекций.

UPD: Переместил тему в архив вопросов.