@mbcsoft

Как создать custom массив, где каждому элементу выдано N-байт?

Всем привет.

Такой вопрос. Имеется массив чисел (тип может быть char, int, int_64 и т.д.), определенный вне main
int a[] = {10, 1, 1, 0, 0, 2, 2, 3, 4, 5, 10};

Нужно написать функцию, которая копирует этот массив в стек, создавая массив такого же типа.
void *copytostack(void *source, int n){ // копирует в стек по ссылке
	n = n * sizeof(source[0]);
	void *dest = malloc(n);
	memcpy(dest, source, n);
	return dest;
}


Проблема в том, что sizeof(source[0]), получая указатель на неопределенный тип, возвращает 1 (1 байт), вне зависимости от начального типа.

Может быть есть возможность создать custom-массив, у которого sizeof будет отдавать заранее заданное количество байтов? Или просто передавать функции количество байтов под один элемент?
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Mercury13
Программист на «си с крестами» и не только
1. В какой стек? В стек вызовов так не скопируешь (насколько я знаю, в некоторых реализациях Си есть функция alloca, выделяющая память на стеке до return), а в самодельный стек — тут ничего не сказано про стековую структуру, ёмкость и указатель на верхушку. В куче вы выделяете память, в куче…
2. Посмотри функцию calloc. В Си в такой ситуёвине принято именно указывать количество байт на один элемент.
3. Sizeof, чтобы ты знал, вычисляется при компиляции.
Ответ написан
Комментировать
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
Такой вариант не рассматривали?
copytostack(a, sizeof(a));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы