Array in einer Methode zurückgeben
-
hallo
ich habe mir eine Klasse geschrieben um einige wichtige Kommandos für ne seriele übertragung schnell aufrufen zu können.ua auch diese. doch wie man vielleicht sieht ist miten im Array eine 0x00 zu finden. nun entsteht durch das null terminieren das problem bei der übergabe an den string dass ich nur das erste zeichen erhalte. wie soll ich das nun umgehen.
char * getStatusStr(void){ //02 00 01 00 31 15 12 char getStr[7]; getStr[0] = 0x02; getStr[1] = 0x00; getStr[2] = 0x01; getStr[3] = 0x00; getStr[4] = 0x31; getStr[5] = 0x15; getStr[6] = 0x12; return getStr; } char *str; str = myLMS->getStatusStr();
-
Ich würd "einfach" ein anderes Sonderzeichen benutzen. strings und char* sind ja eigentlich eh hauptsächlich für menschenlesbare Daten zu verwenden, wenn du einfach statusflags liefern willst kannst du genausogut bytes o.ä. benutzen
-
So funktioniert das nicht. Du gibts einen Zeiger auf einen
Array zurück der nach dem Funktionsaufruf nicht mehr
existiert.
-
hast doch alles was du brauchst: einen pointer auf dein lokalen rueckgabewert der ohnehin nach funktionsaufruf ungueltig wird-beispiel:
char *f() { char a[]="Test"; return a; }; int main() { char *str=f(); printf("%s",str); return 0; };mach deine daten in der funktion besser static.
und nun zum eigentlichen problem: 1. du kannst einen anderen datentyp nehmen-waere in dem fall auch anzuraten
oder 2. kannst doch einfach auf den rueckgabewert (der static sein sollte) mit dem indexoperator zugreifen ([])
-
*argh*- bin ich wirklich so langsam

-
erst mal dande für die viellen antworten
nach euren vorschlägen dachte ich jetzt ich mach mir ein int arrayint * getStatusStr(void){ //02 00 01 00 31 15 12 static int getStr[7]; getStr[0] = 0x02; getStr[1] = 0x00; getStr[2] = 0x01; getStr[3] = 0x00; getStr[4] = 0x31; getStr[5] = 0x15; getStr[6] = 0x12; return getStr; } //na gut. natürlich geht das jetzt nicht mehr nach char arr oder?? char *str = myLMS->getStatusStr(); //ich brauch das char array eben ;) serial_port.sendData( str, txtLen);
-
Wenn Du ihn eh senden willst, wäre es dann nicht umgekehrt einfacher?
void sendStatusStr(MyPort& serial_port){ //02 00 01 00 31 15 12 char getStr[7]; getStr[0] = 0x02; getStr[1] = 0x00; getStr[2] = 0x01; getStr[3] = 0x00; getStr[4] = 0x31; getStr[5] = 0x15; getStr[6] = 0x12; serial_port.sendData( getStr, 7 ); }Oder aber Du musst halt noch die Grösse rausgeben, dann muss aber das char-Array statisch sein, sonst ist es weg, bevor es jemand benutzen kann, da es ja eh konstant ist, ist das auch okay:
const char * getStatusStr(int& len){ //02 00 01 00 31 15 12 static char getStr[7] = { 0x02, 0x00, 0x01, 0x00, 0x31, 0x15, 0x12 }; len = 7; return getStr; } const char *str; int textLen; str = myLMS->getStatusStr( textLen ); serial_port.sendData( str, textLen );Natürlich könnte man auch char* und textLen zusammen in einem Objekt zurückgeben, will man das flexibler, könnte man sich dafür eine Message-Klasse oder ähnliches basteln...
-
so hats geklappt. hät ich eigenlich auch drauf kommen sollen, können.
jedenfals besten dank. werd mich in nächster zeit noch mehr mit peunter und zeiger beschäftigen. um etwas das gefühl dafür zu bekommen.

void sendBaud38400Str(Tserial_event& serial_port){ //02 00 02 00 20 40 50 08 char sendStr[] = {0x02, 0x00, 0x02, 0x00, 0x20, 0x40, 0x50, 0x08}; serial_port.sendData(sendStr, 7); }