Как работае этот код

romansochi

✩✩✩✩✩✩✩
20 Окт 2022
4
0
Помогите пожалуйста понять как работает этот код
C++:
char* TextBuffer "000"


TextBuffer[0] = '0' + tttt / 100;
TextBuffer[1] = '0' + (tttt % 100) / 10;
TextBuffer[2] = '0' + tttt % 10;
Serial.prrintln(TextBuffer);
Понятно что както связано с указателем б но TextBuffer "000" непонятно на что указывает.....


Просто пытался переделать данный кусок кода под себя и он естественно заработал неправильно

C++:
void MyStr(int Mheat, int Mmin, int Msec) {
  TBuf[0] = '0' + Mheat / 100;
  TBuf[1] = '0' + (Mheat % 100) / 10;
  TBuf[2] = '0' + Mheat % 10;
  MBuf[0] = '0' + (Mmin % 100) / 10;
  MBuf[1] = '0' + Mmin % 10;
  SBuf[0] = '0' + (Msec % 100) / 10;
  SBuf[1] = '0' + Msec % 10;
}
C++:
char* TBuf = "000";
char* MBuf = "00";
char* SBuf = "00";



MyStr(111, 30,32);
Serial.println(String(ttt) + "--" + TBuf + "-" + MBuf + ":" + SBuf );
Выдает
0--132-32:32

sprintf, printf не предлагать . Я serial только для примера показал .....
вывод на экран.
Но важнее понять как работает...
 
Изменено:

te238s

★★✩✩✩✩✩
14 Ноя 2021
374
97
Переменная содержит 3 значное число,которое раскладывается на 3 цифры:сотни,десятки,единицы.
Указатель на строку "ооо",к нему обращаемся как к массиву из трех байтов char,в которые данные цифры записываются. Правильно понял?
В общем,число переводим в текст.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Вот тут неверно::
MBuf[0] = '0' + (Mmin % 100) / 10;
  MBuf[1] = '0' + Mmin % 10;
  SBuf[0] = '0' + (Msec % 100) / 10;
  SBuf[1] = '0' + Msec % 10;
Надо так::
MBuf[0] = '0' + Mmin  / 10;
  MBuf[1] = '0' + Mmin % 10;
  SBuf[0] = '0' + Msec  / 10;
  SBuf[1] = '0' + Msec % 10;
 

te238s

★★✩✩✩✩✩
14 Ноя 2021
374
97
А какая среда IDE? Может с типами данных проблема? А если в TXBuf напрямую цифры прописать? Или другое число попробовать.
 

poty

★★★★★★✩
19 Фев 2020
3,230
940
@romansochi, Вы объявили указатели на 3 строчных литерала, два из которых компилятор посчитал подстроками первого, поэтому указатели получились на одну и ту же область. Лучше объявлять это как:

char TBuf[] = "000";
и т.д.
 
Изменено: