char XXX_text[4]; Hallo Leute! Im Obigen Char-Feld ist ein dreistelliges Ergebnis einer rechenoperation gespeichert in welches ich nachträglich ein Komma einfügen will. Wie mache ich das am besten ? (Ich will keine Fließkomma-Operationen durchführen.)
Geht nicht direkt. Weil in char XXX_text[4] ein Element zu wenig Platz ist: 3 Ziffern + 1 Nullbyte = 4. Mit Komma sind es aber 5 Zeichen. Was tun? Man kann die drei Ziffern in ein um 1 grösseres Feld umkopieren und dabei z.B. zwischen der 1. und der zweiten Ziffer das Komma kopieren. Oder je nach Programmablauf, lässt man das Umkopieren sein und gibt die Ziffern und das Komma direkt z.B. auf LCD oder UART aus.
Danke für die schnelle Antwort! genau um das Umkopieren von Bytes innerhalb eines Char ging es mir..in Assembler hätte ich einfach das eine oder 2 bytes ausseinandergeschoben und ein Komma eingefügt. gibt es in C auch eine Möglichkeit/Befehl Bytes in einem Char hin und her zu schieben?
Mach doch das Array einfach etwas größer, damit Platz für das Komma bleibt:
1 | char XXX_text[5]; |
Um bspw. das Komma vor die letzte der drei Ziffern zu stellen, machst du
1 | XXX_text[4] = '\0'; // Stringende nach dem 4. Zeichen |
2 | XXX_text[3] = XXX_text[2]; // letzte Ziffer eins nach rechts schieben |
3 | XXX_text[2] = ','; // ein Komma an die freie Stelle schreiben |
> genau um das Umkopieren von Bytes innerhalb eines Char ging es > mir.. In einem char steht nur ein Byte. > gibt es in C auch eine Möglichkeit/Befehl Bytes in einem Char hin und > her zu schieben? Du meinst in einem Array. Es gibt die Funktion memmove.
Hall0! danke für eure Antworten! Der Vorschlag von yalu war genau die Lösung meines Problems! Guten Rutsch ins Neue Jahr allerseits!
Zu Stefan B: steht in Jedem Array ein Nullbyte? ist es das hier?: XXX_text[4] = '\0'; // Stringende nach dem 4. Zeichen
du kannst auch mit dem [4]Array 3 Zahlen + komma + \oByte speichern. XXX[0] ist ja schliesslich auch noch ein Char mit nem Byte Platz
> du kannst auch mit dem [4]Array 3 Zahlen + komma + \oByte speichern. > XXX[0] ist ja schliesslich auch noch ein Char mit nem Byte Platz Das ist Quark. Ein mit char Array[4]; deklariertes Array hat genau VIER Elemente: Array[0] .. Array[3]. Ein Zugriff auf Array[4] ist nicht zulässig.
>> XXX[0] ist ja schliesslich auch noch ein Char mit nem Byte Platz
Nö, das ist ein Array mit 0 Elementen, was auch entweder ne Warnung oder
nen Fehler beim Kompilieren gibt.
>>> XXX[0] ist ja schliesslich auch noch ein Char mit nem Byte Platz > > Nö, das ist ein Array mit 0 Elementen, Nein. Es inidizert das erste Element des Arrays. Wie groß das ist, kann man an dieser Stelle nicht sagen.
Rolf Magnus wrote: >>>> XXX[0] ist ja schliesslich auch noch ein Char mit nem Byte Platz >> >> Nö, das ist ein Array mit 0 Elementen, > > Nein. Es inidizert das erste Element des Arrays. Wie groß das ist, kann > man an dieser Stelle nicht sagen. char XXX[0]; Ist ein Array mit 0 Elementen. (Und so aufgefasst, passt es auch besser in den Kontext des Ursprungsposts). Zugegeben, das ist nicht genau das, was oben steht. Daran sieht man mal wieder, dass man sich doch immer genau ausdrücken sollte.
> char XXX[0]; Das 'char' hast du jetzt dazugedichtet. Vergleiche mit: >> XXX[0] ist ja schliesslich auch noch ein Char mit nem Byte Platz > Zugegeben, das ist nicht genau das, was oben steht. Daran sieht > man mal wieder, dass man sich doch immer genau ausdrücken sollte. Oder genau lesen ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.