Как создать и использовать структуру с помощью стека, заканчивающуюся гибким элементом массива C99 в C ++ без неопределеC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как создать и использовать структуру с помощью стека, заканчивающуюся гибким элементом массива C99 в C ++ без неопределе

Сообщение Anonymous »

Я называю 3-й стороны библиотеки C99 из Modern C ++. API содержит структуру, которая заканчивается гибким массивом. Чтобы выделить структуру на стеке, я думаю, что мне нужен байтовый буфер, а затем поднять его в структуру.

Код: Выделить всё

#include 
#include 

// 3rd-part C99 API
extern "C" {
struct Foo {
int length;
int array[];
};

void do_something(struct Foo*);
}

// My C++ code
auto bar() {
auto length = 4;
std::byte buffer[sizeof(Foo) + length * sizeof(int)];
auto &foo = *reinterpret_cast(buffer); // ← Is this UB?
foo.length = length;
do_something(&foo); // ← Is this UB?
std::println("Result: {}", foo.array[3]); // ← Is this UB?
}
Редактировать: я компилируюсь с -std = gnu ++ 23 так>

Подробнее здесь: https://stackoverflow.com/questions/797 ... xible-arra
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»