array of UTF-8 strings in FLASH (PROGMEM / strcpy_P / ...)

BTW, you don’t need that intermediate buffer to print the strings:

Serial.println(reinterpret_cast<const __FlashStringHelper *> pgm_read_word(&string_table[i]));

this works as well, needing no buffer,

how can I wrap this in a function (or macro) for better handling / readability ?

I tried this:

void flash_println(const char* const* adress)
 Serial.println(reinterpret_cast<const __FlashStringHelper *> pgm_read_word(adress));

// then calling:

it works, but maybe there’s a easier way without needing so much referencing and dereferencing (*/&) ?

Dirk67, I think you found a bug, but I have no idea in which program or driver the bug is in. Compiling from cache would be different ? I think that is very unlikely, but then again, so are all the other causes that I can think of. I did my tests with an unzipped Arduino IDE 1.6.6 from the harddisk, and I had the save-before-upload turned on.

Koepel: Dirk67, I think you found a bug...

yes... maybe... I think so too, can anyone reproduce this error I described above ?

:o Confirmed :o
In Windows 10.
A lot of rubbish characters instead of UTF-8, and it continues, they don’t become normal.

My sketch folder is still on the harddisk.
When I save the sketch, and upload, then everything is back to normal again.
Adding a space, not saving the sketch, uploading… and they are all wrong.

The temporary files are in / Users / / AppData / Local / Temp / build…
(note that AppData is a hidden folder).
The resulting file is the *.hex file.
I compare the normal *.hex files, not the one with the bootloader.
The *.hex files are not the same !
When not saving the sketch, something wrong is uploaded to the Arduino board !

When a file is stored, the compiler uses that file. It is often in the Documents / Arduino folder.
When a file is not stored, a temporary file is written to that build… folder, and that file is not UTF-8. The resulting hex file is shorter because of that.
The temporary file is called “.ino.cpp” and the preprocessor creates a “ctags_targe.cpp”.

What shall we do now ? I don’t know how to report this.

Koepel: What shall we do now ? I don't know how to report this.

I opened an issue (not knowing if this is the right way to do) -->