How to initialize std :: array <char, N> with a string literal omitting the final '\ 0'
I have a file structure where fixed-length strings don't have trailing zero. How to initialize fields as std :: array without trailing zero:
#pragma pack(push, 1) struct Data { // Compiles, but it has an undesired '\0': std::array<char, 6> undesired_number{"12345"}; // Does not compile: std::array<char, 5> number{"12345"}; // stripping '\0' }; #pragma pack(pop) +5
2 answers
Creating a helper function
template <std::size_t N, std::size_t ... Is> std::array<char, N - 1> to_array(const char (&a)[N], std::index_sequence<Is...>) { return {{a[Is]...}}; } template <std::size_t N> 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' }; +11