size_t count = 0; char result[5]; // to hold 4 char + terminating '\0' const char progStr1[] PROGMEM = "pt"; const char progStr2[] PROGMEM = "ptest1"; void setup() { Serial.begin(9600); for (int i = 10; i > 0; i--) { Serial.print(i); Serial.print(' '); delay(500); } Serial.println(); Serial.println(F("strlcpy and strlcat example")); Serial.println(); Serial.println(F("strlcpy example")); Serial.println(F("count = strlcpy(result,\"sm\",sizeof(result));")); count = strlcpy(result, "sm", sizeof(result)); // count is the number of chars that SHOULD have been copied NOT what was copied Serial.print(F(" count:")); Serial.print(count); Serial.print(F(" result '")); Serial.print(result); Serial.print("'"); Serial.println(); Serial.println(F("count = strlcpy(result,\"test1\",sizeof(result));")); // 5 char + 1 terminating '\0' => need char[6] for dest count = strlcpy(result, "test12345", sizeof(result)); // count is the number of chars that SHOULD have been copied NOT what was copied Serial.print(F(" count:")); Serial.print(count); Serial.print(F(" result '")); Serial.print(result); Serial.print("'"); Serial.println(); Serial.println(F(" count is the number of chars that SHOULD have been copied NOT what was copied.")); // add test for overflow/truncation if (strlcpy(result, "test12345", sizeof(result)) >= sizeof(result)) { Serial.print(F(" strlcpy result trunctated expected:")); Serial.print(count); Serial.print(F(" copied:")); Serial.print(sizeof(result) - 1); Serial.println(); // Note: sizeof(result)-1 is the max number of chars + 1 for terminating '\0' } Serial.println(); Serial.println(F("strlcat example")); Serial.println(F("count = strlcpy(result,\"te\",sizeof(result));")); count = strlcpy(result, "te", sizeof(result)); Serial.println(F("count = strlcat(result,\"st1\",sizeof(result));")); // 2 existing + 3 char + 1 terminating '\0' => need char[6] for dest count = strlcat(result, "st1", sizeof(result)); // count is the number of chars that SHOULD have been copied NOT what was copied Serial.print(F(" count:")); Serial.print(count); Serial.print(F(" result '")); Serial.print(result); Serial.print("'"); Serial.println(); // add test for overflow/truncation if (count >= sizeof(result)) { // or if( (count = strlcat(result, "st1", sizeof(result))) >= sizeof(result)) { Serial.print(F(" strlcat result trunctated expected:")); Serial.print(count); Serial.print(F(" copied:")); Serial.print(sizeof(result) - 1); Serial.println(); // Note: sizeof(result)-1 is the max number of chars + 1 for terminating '\0' } Serial.println(); Serial.println(F("strlcpy_P example using PROGMEM")); Serial.println(F("const char progStr1[] PROGMEM = \"pt\";")); Serial.println(F("const char progStr2[] PROGMEM = \"ptest1\";")); Serial.println(F("count = strlcpy_P(result,progStr1,sizeof(result));")); count = strlcpy_P(result, progStr1, sizeof(result)); // count is the number of chars that SHOULD have been copied NOT what was copied Serial.print(F(" count:")); Serial.print(count); Serial.print(F(" result '")); Serial.print(result); Serial.print("'"); Serial.println(); Serial.println(F("count = strlcpy_P(result,progStr2,sizeof(result));")); // 5 char + 1 terminating '\0' => need char[6] for dest count = strlcpy_P(result, progStr2, sizeof(result)); // count is the number of chars that SHOULD have been copied NOT what was copied Serial.print(F(" count:")); Serial.print(count); Serial.print(F(" result '")); Serial.print(result); Serial.print("'"); Serial.println(); // add test for overflow/truncation if (count >= sizeof(result)) { // or if ( (count = strlcpy_P(result, progStr2, sizeof(result))) >= sizeof(result)) { Serial.print(F(" strlcpy_P result trunctated expected:")); Serial.print(count); Serial.print(F(" copied:")); Serial.print(sizeof(result) - 1); Serial.println(); // Note: sizeof(result)-1 is the max number of chars + 1 for terminating '\0' } Serial.println(); Serial.println(F("strlcat_P example using PROGMEM")); Serial.println(F("count = strlcpy_P(result,progStr1,sizeof(result));")); count = strlcpy_P(result, progStr1, sizeof(result)); Serial.println(F("count = strlcat_P(result,progStr2,sizeof(result));")); count = strlcat_P(result, progStr2, sizeof(result)); // count is the number of chars that SHOULD have been copied NOT what was copied Serial.print(F(" count:")); Serial.print(count); Serial.print(F(" result '")); Serial.print(result); Serial.print("'"); Serial.println(); // add test for overflow/truncation if (count >= sizeof(result)) { // or if ( (count = strlcat_P(result, progStr2, sizeof(result))) >= sizeof(result)) { Serial.print(F(" strlcat_P result trunctated expected:")); Serial.print(count); Serial.print(F(" copied:")); Serial.print(sizeof(result) - 1); Serial.println(); // Note: sizeof(result)-1 is the max number of chars + 1 for terminating '\0' } Serial.println(); Serial.println(F("strlcpy_P example using F( )")); Serial.println(F("count = strlcpy_P(result,(const char *)F(\"Ftest\"),sizeof(result));")); count = strlcpy_P(result, (const char *)F("Ftest"), sizeof(result)); // count is the number of chars that SHOULD have been copied NOT what was copied Serial.print(F(" count:")); Serial.print(count); Serial.print(F(" result '")); Serial.print(result); Serial.print("'"); Serial.println(); // add test for overflow/truncation if (count >= sizeof(result)) { // or if ( (count = strlcpy_P(result, (const char *)F("Ftest"), sizeof(result))) >= sizeof(result)) { Serial.print(F(" strlcpy_P result trunctated expected:")); Serial.print(count); Serial.print(F(" copied:")); Serial.print(sizeof(result) - 1); Serial.println(); // Note: sizeof(result)-1 is the max number of chars + 1 for terminating '\0' } Serial.println(); Serial.println(F("strlcat_P example using F( )")); Serial.println(F("count = strlcpy_P(result,(const char*)F(\"Fte\"),sizeof(result));")); count = strlcpy_P(result, (const char*)F("Fte"), sizeof(result)); Serial.println(F("count = strlcat_P(result,(const char*)F(\"est\"),sizeof(result));")); // 2 existing + 3 char + 1 terminating '\0' => need char[6] for dest count = strlcat_P(result, (const char*)F("st"), sizeof(result)); // count is the number of chars that SHOULD have been copied NOT what was copied Serial.print(F(" count:")); Serial.print(count); Serial.print(F(" result '")); Serial.print(result); Serial.print("'"); Serial.println(); // add test for overflow/truncation if (count >= sizeof(result)) { // or if ( (count = strlcat_P(result, (const char*)F("st"), sizeof(result))) >= sizeof(result)) { Serial.print(F(" strlcat_Ptrlcat result trunctated expected:")); Serial.print(count); Serial.print(F(" copied:")); Serial.print(sizeof(result) - 1); Serial.println(); // Note: sizeof(result)-1 is the max number of chars + 1 for terminating '\0' } Serial.println(); } void loop() { // put your main code here, to run repeatedly: }