char-Array Länge ermitteln
-
Hi,
das geht so leider nicht. sizeof() sagt mir doch IMHO nur, wieviel Byte ein Datentyp auf meinem System groß ist. Das liefert mit nicht, was ich erwarte. Oder ich stell' mich zu blöd an.
Ich hätte strlen() verwendet, aber das Problem ist, dass ich nicht wissen kann, wie die gelesenen Bytes aussehen. Wenn ich zum Beispiel folgende vier Bytes lese:
00 00 03 6A
, dann liefert mit strlen() eine 0 als Länge, da ja rein String-technisch der String schon im ersten Zeichen terminiert wegen 00 (\0).
Gibts da noch ne andere Möglichkeit?
Danke,
mid
-
Hallo,
, dann liefert mit strlen() eine 0 als Länge, da ja rein String-technisch der String schon im ersten Zeichen terminiert wegen 00 (\0).
Das ist nicht richtig: 0 != \0. Warum probierst du strlen nicht einfach mal aus und stellst selbst fest, obs funktioniert?!
-
CarstenJ schrieb:
Das ist nicht richtig: 0 != \0. Warum probierst du strlen nicht einfach mal aus und stellst selbst fest, obs funktioniert?!
Das stimmt höchstens für den Typ. Ansonsten ist 0 und '\0' das selbe. Diese Zeile gibt "Ja" aus:
cout << ((0=='\0')?"Ja":"Nein");
@Midnighter: Übergib die Länge oder markiere das Ende mit einem speziellen Token.
-
Hallo,
also entweder hab ich die Problematik nicht richtig verstanden oder mein strlen() funktioniert anders als eures. Wenn ich das hier schreibe...
char* test="00 00 03 6A"; printf("%i", strlen(test));
...kommt bei mir 11 raus, und zwar auch dann, wenn ich den String an eine Funktion übergebe.
-
Was Midnighter geschrieben hat, soll vermutlich die Rohdaten in hexadezimaler Darstellung darstellen, keinen Text.
-
CarstenJ schrieb:
Hallo,
also entweder hab ich die Problematik nicht richtig verstanden oder mein strlen() funktioniert anders als eures. Wenn ich das hier schreibe...
char* test="00 00 03 6A"; printf("%i", strlen(test));
...kommt bei mir 11 raus, und zwar auch dann, wenn ich den String an eine Funktion übergebe.
Schau dir nochmal genau sein letztes Posting an.
Midnighter schrieb:
Wenn ich zum Beispiel folgende vier Bytes lese:
00 00 03 6A
In deinem Beispiel hast du nicht die vier Bytes 00 00 03 6A sondern einfach diese ASCII Zeichen in einen String gepackt. Das ist ein Unterschied
-
Was Midnighter geschrieben hat, soll vermutlich die Rohdaten in hexadezimaler Darstellung darstellen, keinen Text
und interpreter hat ja auch schon die richtige antwort dazu gegeben.
@Midnighter: Übergib die Länge oder markiere das Ende mit einem speziellen Token
-
CarstenJ schrieb:
...also entweder hab ich die Problematik nicht richtig verstanden...
Ok, ack.
-
Hallo!
Folgender Vorschlag:
#define ARRAY_SIZE(a) (sizeof(a) / (sizeof(a[0])))
Gruß
Michael
-
bloodshower schrieb:
Hallo!
Folgender Vorschlag:
#define ARRAY_SIZE(a) (sizeof(a) / (sizeof(a[0])))
Gruß
MichaelSchön. Funktioniert nur nicht.
-
Danke für die Antworten. Ich werd mir das Array-Ende markieren.
MfG,
mid
-
bloodshower schrieb:
Hallo!
Folgender Vorschlag:
#define ARRAY_SIZE(a) (sizeof(a) / (sizeof(a[0])))
Gruß
MichaelDas funktioniert höchstens da, wo du das Array auch definiert hast.