Class Bewässerung Problem mit der Initialisierung

C++ erzeugt für jede class/struct automatisch einen spezialisierten Zuweisungsoperator.
Meist wird er weg optimiert, aber man darf ihn auch nutzen.

#include <Streaming.h> // die Lib findest du selber ;-)
Print &cout = Serial; // cout Emulation für "Arme"

class Test
{
  private:
  int value {0};
  char str[20] {"none"};
   
  public:
  Test() = default;
  Test(int v,const char* str):value(v)
  {
    if(strlen(str) < sizeof this->str) strcpy(this->str,str);
  }
  int getValue()
  {
    return value;
  }
  char* getStr()
  {
    return str;
  }
};

Test sqlAbfrage()
{
  return {4711,"Trööt"};
}


Test test;

void setup() 
{
  Serial.begin(9600);
  cout << F("Start: ") << F(__FILE__) << endl;

  cout << test.getValue()  << "  " << test.getStr() << endl;
  test = sqlAbfrage();
  cout << test.getValue()  << "  " << test.getStr() << endl;
}

void loop() 
{

}

--> Code überarbeitet

Nachtrag:
Man muss unter allen Umständen gewähr leisten, dass ein char* auch wirklich auf einen C-String zeigt. Sonst landet man im Undefined Behavior