Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Enumenator - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Pawn ]
Enumenator

#1
Пользователь офлайн   punkochel 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Друзья, объясните как такое возможно?
в енуменаторе я объявил всего 1 переменную размеров в 10 ячеек (40 байт), а обращаться я могу к каждому элементу, при этом могу в него записывать строки любого размера, хоть в 1000 байт.

enum e_test
{
	Name[10],
}
new test[e_test];

main() { 
	strmid(test[Name][0], "Hello, world!", 0, 13, 14);
	printf("%s", test[Name][0]);
	strmid(test[Name][1], "Привет, мир!", 0, 12, 13);
	printf("%s", test[Name][1]);
	strmid(test[Name][2], "Просто текст", 0, 12, 13);
	printf("%s", test[Name][2]);
	strmid(test[Name][3], "Не просто текст", 0, 15, 16);
	printf("%s", test[Name][3]);
}


UPD: Судя по билд-строке, изменяется только сегмент данных (а как же иначе), получается что выделение памяти происходит автоматически?

Сообщение отредактировал punkochel: 23 мая 2020 - 18:45

0

#2
Пользователь офлайн   Shvider 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Если не учитывать, что ты записываешь строку в определённый элемент массива и выводишь в консоль определённый элемент массива, то всё окей.
0

#3
Пользователь офлайн   punkochel 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияShvider (23 мая 2020 - 22:34) писал:

Если не учитывать, что ты записываешь строку в определённый элемент массива и выводишь в консоль определённый элемент массива, то всё окей.


Так а как-же память то? Если я выделяю 4 байта под строку, то поместиться должно только 4 символа (при условии что строка упакована).
И если я начну допустим записывать в ячейки данные во время загрузки, то как сегмент данных будет изменяться?
0

#4
Пользователь офлайн   MassonN 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию
Возможно, это очередной баг. Не думаю, что он юзабельный, но если это действительно баг, то связан он с тем, что enum объявлен и используется не совсем икононично. Во первых, переменные оперативной памяти принято объявлять после main. Во вторых, последний слот в энумераторе не должен содержать запятой, сам энумератор должен закрываться двоеточием. Думаю в твоём случае компилятор выделил всю оперативную память под один массив, поэтому другие переменные предполагаю работать не будут.
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика