I have an API:
void func(struct s st)
{
    //do some stuff
}
when struct s define as:
struct s
{
    char* str1;
    char* str2;
};
Now, I want to call func() multiple times with different pairs of string literals.
So I wanted store my structs in iterable container. for example std::vector:
const std::vector <struct s> sts= 
{
    {
        "str1",
        "str2"
    },
    {
        "str3",
        "str4"
    }
    ...
};
for(auto& st : sts)
{
   func(st);
} 
But I get an error: ISO C++ forbids converting a string constant to ‘char*’. I know the problem is that I try to assign string literal (const char*) to char*, but how can I fix it?
I know I can implement init function (or define), and call it every time. something like:
s init_struct(const char* str1, const char* str2)
{
    char *str1_ = strdup(str1);
    char *str2_ = strdup(str2);
    return {str1_, str2_};
 }
but I want my code simply as possible. also, I can't change func() prototype or struct s declaration.
My question is: what is the fastest and cleanest way to initialize iterable container with the structs?
When I say "fastest" I don't mean to performance (my code doesn't run in real time), but in terms of readability.
 
     
     
     
    
`)– fabian Jul 10 '22 at 17:43