I have a file structure where fixed length strings have no trailing zero. How to initialize fields as std::array without trailing zero:
#pragma pack(push, 1)
A string literal is NUL-terminated, in C++ (unlike C) you cannot take it off by providing a Length - 1
size; therefore it cannot be done directly, also considering that array
internally is a T[N]
.
Making a helper function
template <std::size_t N, std::size_t ... Is>
constexpr std::array<char, N - 1>
to_array(const char (&a)[N], std::index_sequence<Is...>)
{
return {{a[Is]...}};
}
template <std::size_t N>
constexpr std::array<char, N - 1> to_array(const char (&a)[N])
{
return to_array(a, std::make_index_sequence<N - 1>());
}
And then
struct Data {
std::array<char, 5> number{to_array("12345")}; // stripping '\0'
};
Demo