|
| 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で解放します。案外忘れがちです。 これをやらないとメモリーリークが起き、動作が不安定になることもあります。 |