Verkettung von char Strings []

Hallo Liebe Gemeinde,

Falls ich etwas nicht ganz regelkonform poste, bitte ich um Nachsicht , dies ist mein erster Post...

zum Thema: ich versuche gerade Strings zu verketten. Dies soll dazu dienen durch ein Touchdisplay den Dateinamen für eine .txt einzugeben, welche auf der SD-Karte abgespeichert wird. Die Verkettung soll das ".txt" schreiben am ende der Eingabe Übernehmen.

Hier mal mein Code & Fehlermeldung:

char saveBuffer[25];   // Hier steht die Eingabe des Users - die ide will hier die Limitation ...
char txtBuffer[]={'.','t','x','t'};
char verkettung[];
int j;
bool txt = false;
for (int i=0; i<22; i++)   // Hier soll geschaut werden ob ".txt" schon im Dateinamen steht
{           
    if (SaveBuffer[i]== txtBuffer[j])
    {
       j++;
     }
                            
    if(j==4)
     {
        txt = true;
        Serial.println(".txt schon im namen enthalten");
        j=0; 
      }

  //====== Ab hier hab ich das Problem ======//

    if (i>=22 && txt==false)       
      {
       verkettung = SaveBuffer + txtBuffer ;
       Serial.print("SaveBuffer");Serial.println(SaveBuffer + txtBuffer );  / vorläufige Ausgabe
       }
}

///////////////////////////////// Fehlermeldung ///////////////////////////////////
exit status 1
invalid operands of types 'char [25]' and 'char [4]' to binary 'operator+'
//////////////////////////////////////////////////////////////////////////////////////

Ja der code klingt komisch... habe ich aber von

ebenso kann ich den string SaveBuffer nicht ohne [Limit] angeben...?

Vielleicht kann mir da jemand weiterhelfen =)

Wenn noch kein ".txt" drin ist, hänge eins an:

char saveBuffer[25] = "user";
char txtBuffer[] = ".txt";

void setup() {
  Serial.begin(250000);
  if (!strstr(saveBuffer, txtBuffer)) {
    strcat(saveBuffer, txtBuffer);
  }
  Serial.println(saveBuffer);
}
void loop() {}

Oder etwas RAM schonender (5 Byte weniger)

char saveBuffer[25] = "user";
const char txtBuffer[] PROGMEM = ".txt";

void setup() {
  Serial.begin(250000);
  if (!strstr_P(saveBuffer, txtBuffer)) {
    strcat_P(saveBuffer, txtBuffer);
  }
  Serial.println(saveBuffer);
}
void loop() {}

Vielen Dank Whandall für die Schnelle Hilfe :slight_smile:
habs hinbekommen.

Ist echt eine Elegante lösung :sunglasses:

für mein verständnis hätte ich da noch fragen, was sind das für befehle? entstammen die einer String-library oder wie kann ich mir das vorstellen?
und welche bedeutung steht " _P" zu ?

Das sind Funktionen aus der Standad C Library.

http://www.nongnu.org/avr-libc/

Die Varianten mit _P können mit Stringkonstanten aus dem Flash umgehen,
die ohne erwarten alle Parameter im RAM.

Genauer hier:
http://www.nongnu.org/avr-libc/user-manual/group__avr__string.html

Das meiste davon sind normale C Funktionen die es genauso auch auf dem PC gibt. Das ist nichts AVR- oder gar Arduino-spezifisches.

und wieder was gelernt :slight_smile: Vielen Dank