Char Array abschneiden

Hallo Zusammen,

ich würde gerne auf einer SD Karte einzelne Dateien erstellen die die Namen der in dem Array angegebenen Getränke haben. Hierzu möchte ich die Bezeichnungen auf 5 Buchstaben kürzen und anschließend mit der Endung ".txt" versehen.
Leider scheitere ich schon an dem kürzen der Bezeichnungen. Der Code funktioniert soweit ganz gut. Aber wenn ich eine Bezeichnung habe die von Anfang an schon weniger als die 5 Stellen hat funktioniert es nicht mehr richtig.

Folgendes wird ausgegeben:

Zwetschge
Zwetschge
Zwets

Ouzo
Ouzo
Ouzo

Ramazotti
Ramazotti
Ramaz

Es sollte aber ausgegeben werden:

Zwetschge
Zwetschge
Zwets

Ouzo
Ouzo
Ouzo

Blutwurz
Blutwurz
Blutw

Ramazotti
Ramazotti
Ramaz

const char* Getraenk[3][12] = { //Folgend die gewünschten Getränke eingeben. Anzahl muss immer durch 4 Teilbar sein. Wenn nicht möglich, dann mit leerzeichen auffüllen bis durch 4 teilbar.
  {"Willi", "Sauerkirsch", "Himbi", "Berliner Luft", "Fernet", "Holunder", "Zwetschge", "Ouzo", "Blutwurz", "Ramazotti", "Ueberraschung", " "},
  {"Fanta", "cola", "Spezi", "O-Saft", "A-Saft", "Wasser", "Jo-Ha-Sa", "Sprudel", "Kizeu", "Suesser Sprudel", "Limo", " "},
  {"Obstler", "Himbi", "Willi", " ", }, //Spalte3
};

char* text;


const int Anzahlspalten = 3; ///Hier die Anzahl der Menüspalten angeben die auswählbar sind
const int Anzahlzeilen[] = {11, 11, 3,}; ///Hier die Anzahl der Zeilen eingeben. Anzahl eingeben ohne Füllleerzeichen welche in Display auswählbar sein sollen


void setup()
{
  Serial.begin(9600);

  for (int s = 0; s < Anzahlspalten; s++)
  {
    for (int z = 0; z < Anzahlzeilen[s]; z++)
    {
      Serial.println(Getraenk[s][z]);
      text = Getraenk[s][z];
      Serial.println(text);
      text[5] = '\0';
      Serial.println(text);
      Serial.println();
    }
  }
}

void loop()
{
}

Kann mir jemand von euch helfen? Vielleicht habt ihr auch noch einen Tipp wie ich die Endung ".txt" anhängen kann.

Gruß und Dank

Axialgeblaese

char text[20];  // genaue Länge = längstes Wort + 1 
...
strcpy(text,Getraenk[s][z]);
...
strcat(text,".txt");

Gruß Tommy

Dieses lesen

const char * Getraenk[] = { "Willi", "Sauerkirsch", "Himbi", "Berliner Luft", "Fernet", "Holunder", 
                             "Zwetschge", "Ouzo", "Blutwurz", "Ramazotti", "Ueberraschung", 
                             "Fanta", "cola", "Spezi", "O-Saft", "A-Saft", "Wasser", "Jo-Ha-Sa", 
                             "Sprudel", "Kizeu", "Suesser Sprudel", "Limo","Obstler", "Himbi", "Willi"
                           };


void setup() 
{
  Serial.begin(9600);
 
  for(const char *str:Getraenk)
  { 
    char buffer[20] = "";
    strncpy(buffer,str,5);
    strcat(buffer,".txt");
    Serial.println(buffer);
  }
}

void loop() 
{

}

wenn ich eine Bezeichnung habe die von Anfang an schon weniger als die 5 Stellen hat funktioniert es nicht mehr richtig

Du sagst ja auch nicht, was dann passieren soll.
Soll aus "abc" dann "abc.txt" oder "abc__.txt" werden? Die zwei Unterstriche kann man sich auch als Leerzeichen denken...
combies Vorschlag erzeugt übrigens "abc.txt" , was für Dateinamen sinnvoll ist.

Das Problem kann man aus deinem Beispiel nicht erkennen ("Ouzo" sieht doch gut aus?)