Чтение данных из файла на SD

Добрый день. Понимаю что вопрос детский, но не понимаю почему разными способами я получаю одно и тоже
Есть TXT файл.
Его содержание:
00011000
12345678
0

Если с маркерами то
00011000#13 (#10)
12345678#13 (#10)
0#13 (#10) #26

  char socket_buffer[8];
char timer_buffer[8];
  ......
  myFile = SD.open ("config.txt", FILE_READ);
  file_size = myFile.size();
  myFile.seek(0);
  myFile.readBytes (socket_buffer, 8);
  myFile.seek(10);
  myFile.readBytes (timer_buffer, 8);
  myFile.close();
  .......

и второй вариант

  char socket_buffer[8];
char timer_buffer[8];
  ......
  myFile = SD.open ("config.txt", FILE_READ);
  file_size = myFile.size();
  myFile.readBytes (socket_buffer, 8);
for (int i=0; i<8; i++)
  {
    myFile.seek(10+i);
    timer_buffer[i] = myFile.peek ();    
  }
  myFile.close();
  .......

Вывожу для контроля это всё на TFT:

  tft.setCursor(70, 135); tft.setTextColor(CYAN); tft.setTextSize(2); tft.println(socket_buffer);
tft.setCursor(70, 160); tft.setTextColor(CYAN); tft.setTextSize(2); tft.println(timer_buffer);
tft.setCursor(70, 185); tft.setTextColor(CYAN); tft.setTextSize(2); tft.println(file_size);    
  delay (3000);

Почему выводится следующее:
00011000
1234567800011000
21

Откуда “хвост” во второй строчке? Если проблема не с файлом и т.п. а с выводом на TFT, то почему первая и третья строка - правильные?

Потому что печатается всё, пока не встретится 0x00 ! Вы не предусмотрели места под финишный 0 !

Не понял. Печатается на TFT или в буфер?

Я сделал некоторые изменения. Стало ещё непонятнее.

char socket_buffer[8] = "       ";
char timer_buffer[8]; 
char test_buffer[8]; 
  ......
  myFile = SD.open ("config.txt", FILE_READ);
  file_size = myFile.size();
 myFile.seek(0);
  myFile.readBytes (socket_buffer, 8);
  myFile.seek(10);
  myFile.readBytes (timer_buffer, 8);
  myFile.seek(20);
  myFile.readBytes (test_buffer, 8);
  myFile.close();
  .......

  tft.setCursor(70, 135); tft.setTextColor(CYAN); tft.setTextSize(2); tft.print(socket_buffer);
  tft.setCursor(70, 160); tft.setTextColor(CYAN); tft.setTextSize(2); tft.print(timer_buffer);
  tft.setCursor(70, 185); tft.setTextColor(CYAN); tft.setTextSize(2); tft.print(test_buffer);  
  tft.setCursor(70, 210); tft.setTextColor(CYAN); tft.setTextSize(2); tft.print(file_size);    
  delay (3000);


Получил на TFT следующее:
00011000
12345678
0000000012345678
38

При содержании файла:
00011000
12345678
00000000
00000000

Поясните пожалуйста какой именно финишный ноль я должен проверять? У меня после третьей строки есть ещё строчка. А почему в третий буфер “лезет” информация со второй строчки?

[8] → [9]

Мужик, ну ты совсем темный? Не знаешь как строчки в Си устроены? Это же базовые знания…
Для того чтобы хранить строку из 8 символов - массив должен быть НА 9 ЭЛЕМЕНТОВ!

Спасибо. Стараюсь.
Я во время этой лекции в универе ходил пить пиво с пацанами на набережную.

Дак и щас ходи.

:)) Эхх, хорошо бы. Но, пацаны разъехались, набережная уже не та, живу я уже не в том городе, да и дело было 25 лет назад …

1 лайк