
Zitat von
HaWe
die Zeile
char* info;
alloziert dafür keinen Speicherbereich, du schreibst also Daten ggf irgendwohin ins Speicher-Nirwana - richtiger wäre etwas in der Art wie
char info[30];
"info" ist der String für die RDS-Information, deren Länge unbekannt/variabel ist. Darum hab ich hier char* verwendet statt einer definierten Länge. Die Idee hatte ich von hier: https://www.geeksforgeeks.org/char-v...ing-vs-char-c/

Zitat von
HaWe
auch die Zeilen
void ServiceName(char *name)
{ info = name; }
tun nicht, was sie wschl sollen, denn man kann einem char* oder char[] cstring nicht mit "=" einen char array (z.B. einen anderen cstring) zuweisen
(außer eine Konstante direkt beim Definieren; tatsächlich weist du hier nur einem Pointer auf eine Speicheradresse einen anderen Pointer auf eine andere Speicheradresse zu)
- richtiger wäre hier
strcpy(info, name); // besser noch: strncpy verwenden!
Liest sich logisch für mich und hab ich gerade ausprobiert:
Code:
void ServiceName(char *name)
//{ info = name; }
{ strcpy(info, name);}
Leider ist dann die RDS-Anzeige leer. Mit {info = name;} läuft es problemlos!?

Zitat von
HaWe
PS,
auch Zeilen wie
info = "";
odert
if(info == "")
sind aus ähnlichen Gründen syntaktisch nicht korrekt ( das geht mit C++ String und std::string, aber nicht mit ANSI C cstring (char[] arrays).
OK, schau ich mir als Nächstes an.

Zitat von
HaWe
PPS
wie ServiceName() funktionieren soll (zB. in rds.attachServicenNameCallback(ServiceName) ) verstehe ich allerdings auch nicht, denn du es hast es ja als void definiert, und ich sehe nicht, wo du an ServiceName() überhaupt eine cstring-Variable als Parameter übergibst.
Das kommt aus der verwendeten Library "radio.h". Ich habe die Code-Schnipsel aus dem in der Library enthaltenen Beispiel-Code "SerialRadio.ino" Zeile 177/178 entnommen.
Lesezeichen