PDA

Просмотр полной версии : [Вопрос] Показ большего массива



123
23.02.2017, 05:25
Есть массив:

static const list_animations [] =
!"1. Танец 1\n2. Танец 2\n3. Танец 3\n4. Танец 4\n5. Танец 5\n6. Танец 6\n\
7. Махать рукой\n8. Лечь на землю\n9. Походка пьяного\n10. Кувыркаться\n\
11. Попрощаться\n12. Читать рэп\n13. Укрыться\n14. Подложить бомбу\n\
15. Надеть маску\n16. Вытянуть руку перед собой\n17. Сложить руки вместе\n\
18. Съел что-то не то...\n19. Перекусить\n20. Шлёпнуть кому-то по заднице\n\
21. Предложить наркотики\n22. Эффект электрошокера\n23. Мужское курение\n\
24. Женское курение\n25. Присесть\n26. Восточное единоборство\n27. Выпить напиток\n\
28. Танец на одной ноге\n29. Поза вратаря\n30. Facepalm\n\
31. Элемент восточного танца\n32. Позвать кого-то\n33. Руки вверх!\n\
34. Спать на боку\n35. Спать на спине\n36. Смотреть по сторонам\n\
37. Облокотиться на бок\n38. Толкнуть боком\n39. Раздумье\n\
40. Лечь, оперевшись на ладонь\n41. Сесть на стул\n\
42. Сидеть уставшим за компьютером\n43. Сидеть за столом\n\
44. Сидеть и печатать\n45. Взять что-то и рассмотреть\n\
46. Сесть, закинув ногу на ногу\n\47. Отказаться от чего-либо\n\
48. Поцелуй 1\n49. Поцелуй 2\n50. Поцелуй 3\n\
51. Размахивать руками на месте\n52. Искуственное дыхание\n\
53. Пощёчины для лежачего\n54. Подглядывать через что-то\n\
55. Движение тореодора\n56. Сесть на стул (2)\n57. Сесть на стул (3)\n\
58. Смотреть наверх\n59. Указать рукой наверх\n60. Быть в страхе\n\
61. Призывать к чему-либо\n62. Сходить по-маленькому\n63. Гангстерский жест\n\
64. Голосовать на остановке\n65. Удар ногой\n66. Стучаться в дверь\n\
67. Устроить бунт\n68. Пританцовывать\n69. Лечь на землю (2)\n\
70. Плохое самочувствие\n71. Приветствие 1\n72. Приветствие 2\n\
73. Приветствие 3\n74. Приветствие 4\n{33cc00}Информация";

Собственному любому понятно, что он слишком большой (даже огромный), и компилятор, конечно, отказывается с ним работать. Есть какой нибудь выход из данного положения? Кроме как использования компилятор от Zeex, и разделения массива с использованием форматирования.

Дабы вот так просто показать массив:

ShowPlayerDialog(playerid, DIALOG_ANIMATION, DIALOG_STYLE_LIST,
!"{660099}Анимации", list_animations, !"Выбрать", !"Закрыть"
);

vovandolg
23.02.2017, 06:10
static const ololo_1[] = "1 строка";
static const ololo_2[] = "2 строка";
static const ololo_3[] = "n-ая строка и т.д.";

new str[sizeof(ololo_1) + sizeof(ololo_2) + sizeof(ololo_3) + 1];

//сцепить эти три(или более) строки через strcat и дело в шляпе

Long-
23.02.2017, 13:05
static const ololo_1[] = "1 строка";
static const ololo_2[] = "2 строка";
static const ololo_3[] = "n-ая строка и т.д.";

new str[sizeof(ololo_1) + sizeof(ololo_2) + sizeof(ololo_3) + 1];

//сцепить эти три(или более) строки через strcat и дело в шляпе


static const - без форматирования будет работать не корректно (а именно ошибки при компиляции)
Так-же не понимаю зачем считать кол-во ячеек всех массивов, если можно посчитать один массив с самой длинной строкой.

Скрепление можно произвести в сегменте данных.


static fmt_str1[] = "text";
static fmt_str2[] = "text2";


fmt_str1[sizeof fmt_str1 - 1] = '\n';
fmt_str2[sizeof fmt_str2 - 1] = '\0';


SendClientMessage(playerid, -1, fmt_str1);

Тем самым не вызывая лишних нативный функций и операторов.

vovandolg
23.02.2017, 16:03
static const - без форматирования будет работать не корректно (а именно ошибки при компиляции)

У тебя компилятор своей сборки что ле какие ещё ошибки))
Покажи как ты код накидываешь и ошибки какие...



Скрепление можно произвести в сегменте данных.


static fmt_str1[] = "text";
static fmt_str2[] = "text2";


fmt_str1[sizeof fmt_str1 - 1] = '\n';
fmt_str2[sizeof fmt_str2 - 1] = '\0';


SendClientMessage(playerid, -1, fmt_str1);

Тем самым не вызывая лишних нативный функций и операторов.
согласен) подзабыл что так можно

- - - Добавлено - - -



Так-же не понимаю зачем считать кол-во ячеек всех массивов, если можно посчитать один массив с самой длинной строкой.

Логики у тебя нету вот ты и не понял, заметил что ты один это спросил?



///у человека проблема в том что не вмещается объёмный текст
///я его поделил на части
static const ololo_1[] = "1 строка";
static const ololo_2[] = "2 строка";
static const ololo_3[] = "n-ая строка и т.д.";

///далее создаю массив подсчитывая на ходу сколько всего в нём объёма должно быть для всех строк
new str[sizeof(ololo_1) + sizeof(ololo_2) + sizeof(ololo_3) + 1];

///ещё дальше и отсталый понял бы что тут написано, в массив str закинуть все строки и потом уже юзать готовый объёмный текст
//сцепить эти три(или более) строки через strcat и дело в шляпе

DeimoS
24.02.2017, 00:42
Есть какой нибудь выход из данного положения?

Самый простой и логичный - использовать исправленный компилятор от Zeex (https://github.com/Zeex/pawn/releases). В нём далеко не только эта проблема исправлена + скорость компиляции увеличена

123
24.02.2017, 04:53
Самый простой и логичный - использовать исправленный компилятор от Zeex (https://github.com/Zeex/pawn/releases). В нём далеко не только эта проблема исправлена + скорость компиляции увеличена

Помню пытался его использовать в далеком 2014, тогда и получил побочный эффект в виде крашей. С тех пытаюсь не прибегать к использованию этого детище, также как и плагина JIT, поведение которого не всегда стабильно.

DeimoS
24.02.2017, 23:58
Помню пытался его использовать в далеком 2014, тогда и получил побочный эффект в виде крашей. С тех пытаюсь не прибегать к использованию этого детище, также как и плагина JIT, поведение которого не всегда стабильно.

JIT крашит чаще всего с #emit
А сей компилятор ни разу не вызывал крашей, сколько пользуюсь. Да и логично, что если выпущено столько версий, значит он имеет свою актуальность и кто-то им пользуется => всё норм