# Preferences: String Array lesen und speichern

**URL:** <https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522>\
**Category:** Deutsch\
**Created:** [May 16, 2026, 8:53pm UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522 "2026-05-16T20:53:42Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![SJS](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/sjs/32/1126779_2.png) [@SJS](https://forum.arduino.cc/u/SJS)\
**Post date:** [May 16, 2026, 8:53pm UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/1 "2026-05-16T20:53:42Z")

</div>

Hallo zusammen,

ich nutze beim ES32-S3 die Preferences.h, um während der Laufzeit sich ändernde Werte und Strings dauerhaft zu sichern und beim Start auszulesen.

Bei Integern funktioniert das auch einwandfrei, aber bei Strings bekomme ich es nicht hin. Die Strings werden in der Loop jeweils in einem Array gespeichert (diese kommen über die serielle Schnittstelle herein). Definiert ist das Array als Startwert z.B. wie folgt:

```arduino
char savedvolumePST1[10] = {"VOL:10;"};

```

Im Setup wird der Inhalt aus den Prefs eingelesen:

```arduino
  prefs.begin("Prefs", false);
  prefs.getString("savedvolumePST1", savedvolumePST1);
  prefs.end();

```

In der Loop soll alle paar Minuten der Inhalt eines zweiten Arrays _actualvolumePST1_ (was z.B. mit "VOL:20;" gefüllt ist und initial exakt wie das erste Array definiert ist) in dieses Array dauerhaft abgespeichert werden für den nächsten Neustart:

```arduino
  prefs.begin("Prefs", false);
  prefs.putString("savedvolumePST1", actualvolumePST1);
  prefs.end(); 
            

```

Das funktioniert leider nicht, der Inhalt das Arrays _savedvolumePST1_ enthält beim nächsten Start immer noch den Initialwert "VOL:10;". Kompilieren zeigt jedoch keine Fehler.

Es liegt (vermutlich) am Thema char\* und char array, zwischenzeitlich hatte ich beim Herumprobieren mit prefs.putstring() auch Kompilerfehler wie z.B. "incompatible types in assignment of 'String' to 'char [10]". Ich weiß im Moment leider nicht weiter.

Hat jemand einen Tipp? Dankeschön vorab!

---

<div class="post-metadata">

**Author:** ![HotSystems](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hotsystems/32/219785_2.png) [@HotSystems](https://forum.arduino.cc/u/HotSystems)\
**Post date:** [May 16, 2026, 9:11pm UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/2 "2026-05-16T21:11:49Z")

</div>

Du musst doch den gespeicherten String in eine entsprechende Variable einlesen. Hier ein Beispiel:

```arduino
password = preferences.getString("password", "");

```

[Hier zum nachlesen.](https://randomnerdtutorials.com/esp32-save-data-permanently-preferences/)

---

<div class="post-metadata">

**Author:** ![SJS](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/sjs/32/1126779_2.png) [@SJS](https://forum.arduino.cc/u/SJS)\
**Post date:** [May 16, 2026, 10:04pm UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/3 "2026-05-16T22:04:16Z")

</div>

Danke, ich hatte das aus einem anderen Beispiel.

Wenn ich das so wie vorgeschlagen mache:

`savedvolumePST1 = prefs.getString("savedvolumePST1", "");`

Dann meckert der Compiler, wie oben beschrieben:

```arduino
Compilation error: incompatible types in assignment of 'String' to 'char [10]'

```

Das liegt sicher daran, dass ein char\* erwartet wird aber ein array char[] vorliegt. Aber wie ich das entsprechend umwandle oder im best case mit einem einfachen Befehl hinbekomme (mit .c\_str()...?)...soweit bin ich noch nicht, bin noch Anfänger.

---

<div class="post-metadata">

**Author:** ![wwerner](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/wwerner/32/1001727_2.png) [@wwerner](https://forum.arduino.cc/u/wwerner)\
**Post date:** [May 17, 2026, 6:41am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/4 "2026-05-17T06:41:17Z")

</div>

Also ich würde nie Einstellungen als Strings speichern. Du brauchst doch nur die Werte speichern.

---

<div class="post-metadata">

**Author:** ![wno158](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/wno158/32/1014607_2.png) [@wno158](https://forum.arduino.cc/u/wno158)\
**Post date:** [May 17, 2026, 6:58am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/5 "2026-05-17T06:58:32Z")

</div>

> [@SJS](#):
>
> Das liegt sicher daran, dass ein char\* erwartet wird aber ein array char[] vorliegt.

Nicht wirklich.  
Es wird ein Objekt der Klasse `String` erwartet. `char*` und `char[]` sind eigentlich gleichwertig.  
Mögliche Abhilfen:

- `savedvolumePST1` als `String` deklarieren
- Statt `putString`/`getString` `putBytes`/`getBytes` verwenden - dann kann das ein `char[]` bleiben. Länge ist dann `sizeof(savedvolumePST1)+1` bzw. `11` (eins mehr wg. Null-Byte am Ende)  
Edit (s. #6): Länge ist dann `strlen(savedvolumePST1)+1` (eins mehr wg. Null-Byte am Ende), was nur geht, wenn die Zeichenkette maximal neun Zeichen lang ist.

---

<div class="post-metadata">

**Author:** ![Rintin](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/rintin/32/1013044_2.png) [@Rintin](https://forum.arduino.cc/u/Rintin)\
**Post date:** [May 17, 2026, 7:19am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/6 "2026-05-17T07:19:00Z")

</div>

> [@wno158](#):
>
> Länge ist dann `sizeof(savedvolumePST1)+1` bzw. `11` (eins mehr wg. Null-Byte am Ende)

Damit bewegst du dich um 1 Byte außerhalb des Arrays...

---

<div class="post-metadata">

**Author:** ![wno158](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/wno158/32/1014607_2.png) [@wno158](https://forum.arduino.cc/u/wno158)\
**Post date:** [May 17, 2026, 7:35am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/7 "2026-05-17T07:35:15Z")

</div>

Ja, da hast Du recht.  
Eigentlich meinte ich auch `strlen()`, da braucht es das Byte mehr.  
`sizeof()` zählt alle Bytes.

---

<div class="post-metadata">

**Author:** ![noiasca](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/noiasca/32/1126910_2.png) [@noiasca](https://forum.arduino.cc/u/noiasca)\
**Post date:** [May 17, 2026, 7:49am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/8 "2026-05-17T07:49:15Z")

</div>

> [@SJS](#):
>
> `char savedvolumePST1[10] = {"VOL:10;"};`

abgesehen davon dass du Char Arrays mit Arduino String Objekten bunt würfelst. Warum musst du die Lautstärke als "String" oder Char Array persistieren? Speichere in deinem Beispiel einfach die 10.  
Das "VOL:" ist ja sicher nur ein Fixtext und den Fixtext kannst du ergänzen wenn du es benötigst.

Was schickst du schlussendlich "VOL:10;" wieder hin?

---

<div class="post-metadata">

**Author:** ![Kai-R](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kai-r/32/801182_2.png) [@Kai-R](https://forum.arduino.cc/u/Kai-R)\
**Post date:** [May 17, 2026, 7:53am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/9 "2026-05-17T07:53:02Z")

</div>

Vielleicht hilft ja folgendes Beispiel weiter:

```arduino
#include <Preferences.h>
#include <iostream>

constexpr unsigned maxBufferLen {10};

Preferences prefs;
char buffer[maxBufferLen];

void setup() {

  prefs.begin("Prefs", false);

  // Wenn Key noch nicht vorhanden ist, lege ihn an
  if (!prefs.isKey("savedvolumePST1")) {
    std::cout << "Create key savedvolumePST1" << std::endl;
    prefs.putString("savedvolumePST1", "VOL:00");

  }

  // Lese Daten aus Preferences
  prefs.getString("savedvolumePST1", buffer, maxBufferLen);
  unsigned int counter = prefs.getUInt("counter", 0);

  std::cout << std::endl << "Current saved volume: " << buffer << std::endl;
  std::cout << "Current volume as number: " << counter << std::endl;
  ++counter;

  // Wenn Counter > 99, dann gehe in eine Enlosschleife um das Programm anzuhalten
  if (counter > 99) {
    std::cout << "Program stopped" << std::endl;
    while (1) { ; }
  }

  // Baue neuen "String" zum abspeichern
  sprintf(buffer, "VOL:%02d", counter);

  // Beide Werte abspeichern
  prefs.putUInt("counter", counter);
  prefs.putString("savedvolumePST1", buffer);
  prefs.end();

  // Warte etwas und starte den Cotroller neu
  std::cout << "Restarting in 10 seconds..." << std::endl;
  delay(10000);

  // // Restart ESP
  ESP.restart();
}
void loop() {}

```

Die Frage nach dem Sinn, das immer gleiche "VOL:" abzuspeichern und deswegen String oder char zu verwenden wurde ja schon gestellt. Wie aus dem Beispiel indirekt hervorgeht sollte es ja reichen, einfach nur den Wert zu speichern, der sich auch ändert.

---

<div class="post-metadata">

**Author:** ![HotSystems](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/hotsystems/32/219785_2.png) [@HotSystems](https://forum.arduino.cc/u/HotSystems)\
**Post date:** [May 17, 2026, 8:14am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/10 "2026-05-17T08:14:47Z")

</div>

> [@SJS](#):
>
> Dann meckert der Compiler, wie oben beschrieben:

Ich habe dir ja auch nur gezeigt, wie der String auszulesen ist.  
Ein Beispiel, wie es mit char geht, ist im übrigen auch in dem Beitrag.  
Du musst nur alles lesen und evtl. auch ein wenig selbst kreativ mitwirken.

Ich gebe gerne Hilfestellungen, aber alles vorkauen tue ich nicht, da bin ich zu faul, oder anders gesagt, ich habe selbst noch genug zu tun.

---

<div class="post-metadata">

**Author:** ![noiasca](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/noiasca/32/1126910_2.png) [@noiasca](https://forum.arduino.cc/u/noiasca)\
**Post date:** [May 17, 2026, 9:05am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/11 "2026-05-17T09:05:54Z")

</div>

weil @Kai-R da eine so schöne Vorlage gebaut hat, habe ich das mal verwendet und daraus enen MVP gemacht.

Ich denke es braucht

- eine Funktion um die Lautstärke zu erhöhen (im MVP hab ich mich für einen Button entschieden)
- eine Funktion um die Lautstärke an das Ziel zu senden (im MVP hab ich mich für die Ausgabe auf Serial entschieden)
- Optional: habe ich noch einen Timer gemacht um den aktuellen Wert periodisch auszugeben.

Wie gesagt reicht aus meiner Sicht der unsigned Integer in den Preferences.

schau's dir mal an.

> **[esp32 preferences - Wokwi ESP32, STM32, Arduino Simulator](https://wokwi.com/projects/464255345093490689)**
>
> Run IoT and embedded projects in your browser: ESP32, STM32, Arduino, Pi Pico, and more. No installation required!

> **MVP**
>
> ```arduino
> /*
> save an unsigned integer in Preferences instead of a String/string
> de: uint statt string speichern und ausgeben.
>    
> based on https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/8 by Kai-R
> 2026-05-17 by noiasca https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/11 
> 
> */
> 
> #include <Preferences.h>
> #include <iostream>
> #include "button.h" // simplified class to debounce a button (see separate tab)
> 
> Preferences prefs;
> constexpr unsigned maxBufferLen {10};
> char buffer[maxBufferLen];
> 
> Button btnIncreaseVolume(18);
> 
> uint16_t volume; // @todo tbd if needed as global, value is anyway in the preferences.
> 
> // sends the volume to the destination
> void volumeSend() {
> std::cout << std::endl; // debug only (otherwise you don't see the last line here in the demo imidiately)
> 
> sprintf(buffer, "VOL:%02d;", volume);
> std::cout << buffer; // output to destination - this MVP just uses the Serial
> 
> std::cout << std::endl; // debug only (otherwise you don't see the last line here in the demo imidiately)
> }
> 
> // increase volume, persist to preferences and send to destination
> void volumeIncrease() {
> std::cout << std::endl << "vol inc" << std::endl; // debug only
> volume++;
> if (volume > 99) volume = 99;
> prefs.putUInt("volume", volume);
> volumeSend();
> }
> 
> // timer to check if volume needs to be sent to destination
> void volumeTimer(uint32_t currentMillis = millis()) {
> static uint32_t previousMillis = 0;
> if (currentMillis - previousMillis > 5 * 1000UL) {
> previousMillis = currentMillis;
> volumeSend();
> }
> }
> 
> void setup() {
> Serial.begin(115200);
> prefs.begin("Prefs", false);
> btnIncreaseVolume.begin();
> 
> // Wenn Key noch nicht vorhanden ist, lege ihn an
> if (!prefs.isKey("volume")) {
> std::cout << "Create key volume" << std::endl;
> prefs.putUInt("volume", 0);
> }
> 
> // Lese Daten aus Preferences
> prefs.getUInt("volume", volume);
> 
> std::cout << "Current volume as number: " << volume << std::endl;
> }
> 
> void loop() {
> if (btnIncreaseVolume.wasPressed()) volumeIncrease();
> volumeTimer();
> }
> //
> ```

Wenn du Fragen hast - frage.

P.S.: Ob man die Lautstärke dann noch parallel in einer globalen Variable hält oder einfach nur wenn benötigt aus den Preferences ausliest, kann man entscheiden wenn man den ganzen Kontext wüsste.

---

<div class="post-metadata">

**Author:** ![SJS](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/sjs/32/1126779_2.png) [@SJS](https://forum.arduino.cc/u/SJS)\
**Post date:** [May 17, 2026, 9:39am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/12 "2026-05-17T09:39:00Z")

</div>

Hallo zusammen,

vielen lieben Dank für Eure Antworten und Hilfestellungen!

Ich muss etwas ausholen: das mit dem "VOL:10;" war nur ein "Wert" unter vielen, der persistent gespeichert werden soll. Das mit dem Speichern von Integern funktioniert auch einwandfrei, aber die meisten Inhalte bzw. Variablen sind tatsächlich Zeichenketten.

Hintergrund ist die Steuerung eines Streamers, der per UART mit dem ESP32 kommuniziert. Dieser liefert Statusinformationen und nimmt Befehle entgegen.

Das Einlesen erfolgt hiermit:

```arduino
const byte numChars = 32;
char receivedChars[numChars]; // an array to store the received data
boolean newData = false;
String mystring = "";

void recvWithEndMarker() {
    static byte ndx = 0;
    char endMarker = '\n';
    char rc;
    
    while (Serial1.available() > 0 && newData == false) {
        rc = Serial1.read();
// Serial.print(rc, HEX); // <--- Testausgabe
// Serial.print(' '); // Optik, erleichtert das Lesen
        if (rc != endMarker) {
            receivedChars[ndx] = rc;
            ndx++;
            if (ndx >= numChars) {
                ndx = numChars - 1;
            }
        }
        else {
            receivedChars[ndx] = '\0'; // terminate the string
            if (receivedChars[ndx-2] == ';') (receivedChars[ndx-2] = '\0'); //-2 entfernt die Sonderzeichen am Ende vor der LCD Ausgabe
            ndx = 0;
            newData = true;
        }
    }
}

void showNewData() {
    if (newData == true) {
      if (DEBUG == 1) { Serial.println(receivedChars);
      }
        mystring = (receivedChars);

        if (mystring.startsWith("ART"))
         {
         mystring.remove(0, 4);
         mystring.toCharArray(artist, 32);
         }

```

Im Auszug oben kommt z.B. "ART:Michael Jackson" über die UART herein. Aktuell speichere ich das in einem Array. Habe ich hier schon Bockmist gebaut und es wäre alles im Hinblick auf die Preferences einfacher, das direkt als string zu speichern?, z.B. so:

```arduino
String artist = "";

void showNewData() {
    if (newData == true) {
      if (DEBUG == 1) { Serial.println(receivedChars);}
        mystring = (receivedChars);

        if (mystring.startsWith("ART"))
         {
         mystring.remove(0, 4);
         artist = mystring;
         }

```

Damit müsste ich dann bei den Preferences prefs.getString() und prefs.putString() ohne Umwege nutzen können, oder ist das zu einfach gedacht?

---

<div class="post-metadata">

**Author:** ![Kai-R](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kai-r/32/801182_2.png) [@Kai-R](https://forum.arduino.cc/u/Kai-R)\
**Post date:** [May 17, 2026, 10:02am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/13 "2026-05-17T10:02:47Z")

</div>

Es geht beides. Ich frage mich gerade nur, wo du bei der Nutzung von Char-Arrays "Umwege" gesehen hast?!

Da scheint ein grundsätzliches Verständnisproblem zu herrschen. Im Übrigen könnten auch putBytes oder getBytes verwendet werden.

> **[put - Preferences - - — Arduino ESP32 latest documentation](https://docs.espressif.com/projects/arduino-esp32/en/latest/tutorials/preferences.html#working-with-large-data)**
>
> The Preferences library is unique to arduino-esp32. It should be considered as the replacement for the Arduino EEPROM library.

---

<div class="post-metadata">

**Author:** ![SJS](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/sjs/32/1126779_2.png) [@SJS](https://forum.arduino.cc/u/SJS)\
**Post date:** [May 17, 2026, 10:22am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/14 "2026-05-17T10:22:56Z")

</div>

> [@Kai-R](#):
>
> Es geht beides. Ich frage mich gerade nur, wo du bei der Nutzung von Char-Arrays "Umwege" gesehen hast?!

Ich komme auch nach mehrmaligem Lesen Deines Beispiels oben nicht drauf, wo der Unterschied zu meinem Code liegt (vom Zusammenbau Integer und Text abgesehen).

Mit dem

```arduino
prefs.putString("savedvolumePST1", "VOL:00");

```

bekomme ich den Compilerfehler, wenn ich das initial wie folgt deklariert habe:

```arduino
char savedvolumePST1[10] = {"VOL:10;"};

```

Liegt dort der Fehler?

---

<div class="post-metadata">

**Author:** ![Rintin](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/rintin/32/1013044_2.png) [@Rintin](https://forum.arduino.cc/u/Rintin)\
**Post date:** [May 17, 2026, 10:54am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/15 "2026-05-17T10:54:50Z")

</div>

char \* ist kein String. Versuch mal das:  
`prefs.putString("savedvolumePST1", String( savedvolumePST1 ));`

---

<div class="post-metadata">

**Author:** ![SJS](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/sjs/32/1126779_2.png) [@SJS](https://forum.arduino.cc/u/SJS)\
**Post date:** [May 17, 2026, 11:16am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/16 "2026-05-17T11:16:23Z")

</div>

Danke Dir!

Müsste ich das auch beim Lesen der Prefs so einbauen?

Also wie folgt:

`prefs.getString("savedvolumePST1", String(savedvolumePST1));`

---

<div class="post-metadata">

**Author:** ![Kai-R](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kai-r/32/801182_2.png) [@Kai-R](https://forum.arduino.cc/u/Kai-R)\
**Post date:** [May 17, 2026, 11:20am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/17 "2026-05-17T11:20:08Z")

</div>

Wenn man den Beispielcode nimmt und "buffer" durch "savedvolumePST1" ersetzt, dann funktioniert das auch einwandfrei:

```arduino
#include <Preferences.h>
#include <iostream>

constexpr unsigned maxStrLen {10};

Preferences prefs;
char savedvolumePST1[maxStrLen] {"VOL:00;"};

void setup() {

  prefs.begin("Prefs", false);

  // Wenn Key noch nicht vorhanden ist, lege ihn an
  if (!prefs.isKey("savedvolumePST1")) {
    std::cout << "Create key savedvolumePST1" << std::endl;
    prefs.putString("savedvolumePST1", savedvolumePST1);

  }

  // Lese Daten aus Preferences
  prefs.getString("savedvolumePST1", savedvolumePST1, maxStrLen);
  unsigned int counter = prefs.getUInt("counter", 0);

  std::cout << std::endl << "Current saved volume: " << savedvolumePST1 << std::endl;
  std::cout << "Current volume as number: " << counter << std::endl;
  ++counter;

  // Wenn Counter > 100, dann gehe in eine Enlosschleife um das Programm anzuhalten
  if (counter > 99) {
    std::cout << "Program stopped" << std::endl;
    while (1) { ; }
  }

  // Baue neuen "String" zum abspeichern
  sprintf(savedvolumePST1, "VOL:%02d", counter);

  // Beide Werte abspeichern
  prefs.putUInt("counter", counter);
  prefs.putString("savedvolumePST1", savedvolumePST1);
  prefs.end();

  // Warte etwas und starte den Cotroller neu
  std::cout << "Restarting in 10 seconds..." << std::endl;
  delay(10000);

  // // Restart ESP
  ESP.restart();
}
void loop() {}

```

Von daher würde ich mal sagen, dass der Fehler den Du schilderst seine Ursache woanders hat.

---

<div class="post-metadata">

**Author:** ![Rintin](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/rintin/32/1013044_2.png) [@Rintin](https://forum.arduino.cc/u/Rintin)\
**Post date:** [May 17, 2026, 11:35am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/18 "2026-05-17T11:35:50Z")

</div>

Versuch mal das:

```arduino
auto tmp = prefs.getString("savedvolumePST1", String(savedvolumePST1));
strcpy(savedvolumePST1, tmp.c_str());

```

Hmm.... Schön ist das nicht.

---

<div class="post-metadata">

**Author:** ![SJS](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/sjs/32/1126779_2.png) [@SJS](https://forum.arduino.cc/u/SJS)\
**Post date:** [May 17, 2026, 11:37am UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/19 "2026-05-17T11:37:04Z")

</div>

> [@Kai-R](#):
>
> Von daher würde ich mal sagen, dass der Fehler den Du schilderst seine Ursache woanders hat.

Danke Dir für das Beispiel und die Hilfe!

Ich versuche das nochmal nachzubauen, der einzige Unterschied bei mir ist, dass ich im Setup nicht per

```arduino
if (!prefs.isKey("savedvolumePST1")) {
    prefs.putString("savedvolumePST1", savedvolumePST1);
  }

```

den Key anlege, sondern sofort mit

```arduino
prefs.getString("savedvolumePST1", savedvolumePST1);

```

beginne. Soweit ich das verstanden habe, wird der Key dann automatisch angelegt und mit dem Inhalt "VOL:00;" vorbelegt.

Statt:

```arduino
constexpr unsigned maxStrLen {10};

Preferences prefs;
char savedvolumePST1[maxStrLen] {"VOL:00;"};

```

ist bei mir die Stringlänge fest:

```arduino
Preferences prefs;
char savedvolumePST1[10] {"VOL:00;"};

```

Und ich verwende dann statt:

```arduino
prefs.getString("savedvolumePST1", savedvolumePST1, maxStrLen);

```

nur folgendes ohne die Stringlänge:

```arduino
prefs.getString("savedvolumePST1", savedvolumePST1);

```

Das müsste doch passen, oder?

---

<div class="post-metadata">

**Author:** ![wno158](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/wno158/32/1014607_2.png) [@wno158](https://forum.arduino.cc/u/wno158)\
**Post date:** [May 17, 2026, 1:27pm UTC](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522/20 "2026-05-17T13:27:52Z")

</div>

> [@SJS](#):
>
> `prefs.getString`

Das wird nie einen Key anlegen, sondern es will von einem lesen. `putString()` erledigt das Erstellen des Keys.  
Kai prüft ja die Existenz des Keys mit `isKey()` und legt ihn ggf. mit einem `putString()` an - und das steht exakt im Kommentar über den Zeilen.

> [@SJS](#):
>
> bei mir die Stringlänge fest:

Bei Kai auch - er hat nur den Namen `maxStrLen` für die _magic number_ 10 vergeben (was m.E. die bessere Lösung ist, falls die magische 10 noch woanders im Code vorkommt).

[Next page](https://forum.arduino.cc/t/preferences-string-array-lesen-und-speichern/1444522.md?page=2)
