SDカード 複数の文字読み出し |
テキストファイルで複数の文字読み出す方法です。
テキストファイルはファイルの長さが不定なので、 char buf[64] のように静的確保がうまくできない場合が多いです。 静的確保ではなく動的確保ならスッキリしします。 サンプルプログラムです。 /* ******************************************************************************* * M5Stack prototype * date:2022/7/04 * Author Sadajejeje ******************************************************************************* */ #include <M5Core2.h> void setup(){ size_t size = 0; // M5Stackの初期化 M5.begin(); // 文字サイズを変更 M5.Lcd.setTextSize(2); // ファイルオープン File file = SD.open("/text/hello.txt"); if (file) { // ファイルサイズ取得 size = file.size(); unsigned char *pBuf = new unsigned char[size + 1]; if(pBuf) { file.read(pBuf, size); *(pBuf + size) = 0; M5.Lcd.print((const char*)pBuf); delete[] pBuf; } file.close(); } else{ M5.Lcd.println("File open error hello.txt"); } } void loop(){ } メモリーの動的確保は、 unsigned char *pBuf = new unsigned char[size + 1]; ファイルサイズより1つ大きく確保します。これは最後にnull文字をセットするためです。 *(pBuf + size) = 0; これで文字を正しく表示できます。 動的確保で重要なことは、使ったメモリーはdeleteで解放します。案外忘れがちです。 これをやらないとメモリーリークが起き、動作が不安定になることもあります。 |