Sizeof richtig benutzen

Hi Forum,

folgender Plan: Ich habe ein LED-Display und will dort Nachrichten über ein Telegram-Bot anzeigen lassen. Ich möchte dann eine Funktion schreiben, die die Nachricht als Lauftext anzeigen lässt. Da der Text von Telegram ja nicht immer gleich lang ist und ich die Lauftextfunktion mit einer For-Schleife realiesieren will, wollte ich mit sizeof die Größe ermitteln, damit der komplette text angezeigt wird. Ich hab den Befehl vorher noch nie benutzt. Wenn ich es teste, bekomme ich, egal wie lang der Text von Telegram ist, immer 12 raus. Ich programmiere noch nicht so lange, muss ich gestehen. Benutze ich den Befehl falsch oder warum bekomme ich immer das selbe raus? Danke für die hilfe :slight_smile:
Mfg

#include <Arduino.h>
#include "AsyncTelegram.h"
AsyncTelegram myBot;

const char* Netzwerkname = "xx";            // << kann bis zu 32 Zeichen haben
const char* Passwort = "xx";    // << mindestens 8 Zeichen jedoch nicht länger als 64 Zeichen

#define Bot_ID "xx"    // Telegrammbot ID

void setup() {

  Serial.begin(115200);
  Serial.println("Starting TelegramBot...");

  WiFi.setAutoConnect(true);
  WiFi.mode(WIFI_STA);
  WiFi.begin(Netzwerkname, Passwort);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(500);
  }
  // To ensure certificate validation, WiFiClientSecure needs time upadated
  // myBot.setInsecure(false);
  myBot.setClock("CET-1CEST,M3.5.0,M10.5.0/3");

  myBot.setUpdateTime(2000);
  myBot.setTelegramToken(Bot_ID);

  // Check if all things are ok
  Serial.print("\nTest Telegram connection... ");
  myBot.begin() ? Serial.println("OK") : Serial.println("NOK");

  Serial.print("Bot name: @");
  Serial.println(myBot.userName);
}

void loop() {

  TBMessage msg; // a variable to store telegram message data

  if (myBot.getNewMessage(msg)) // if there is an incoming message...
  {
    Serial.println(sizeof(msg.text));
    Serial.println(msg.text);

    myBot.sendMessage(msg, msg.text);  // echo the received message
  }
}

Laut Definition ist (wenn ich das richtig rauslese - AsyncTelegram/DataStructures.h at master · cotestatnt/AsyncTelegram · GitHub ) text ein String und kein CharArray.
length() - Arduino-Referenz

Deshalb:

protected:
	char *buffer;	        // the actual char array
	unsigned int capacity;  // the array length minus one (for the '\0')
	unsigned int len;       // the String length (not counting the '\0')

Auf einem 32-Bit Prozessor sind das jeweils 4 Byte. Das eigentliche Array ist da nicht dabei

Das gibt die statische Größe einer Datenstruktur, nicht die Länge des dynamisch darin gespeicherten Textes.

So Sehen Sie die Struktur aus:


struct TBMessage {
	MessageType 	 messageType;
	bool			 isHTMLenabled = false;
	bool             isMarkdownEnabled = false;
	bool 	         disable_notification = false;
	bool			 force_reply = false;
	int64_t          chatId;
	int32_t          messageID;
	int32_t          date;
	int32_t          chatInstance;
	TBUser           sender;
	TBGroup          group;
	TBLocation       location;
	TBContact        contact;
	TBDocument       document;
	const char*      callbackQueryData;
	const char*   	 callbackQueryID;
	String      	 text;
};

text ist ein String und length() ist was Sie Suchen.

Serial.println(msg.text.length());