Forum: Compiler & IDEs ein Komma in ein Char nachträglich einfügen


von Kloster (Gast)


Lesenswert?

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.)

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Kloster (Gast)


Lesenswert?

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?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Verwechselst du gerade Bytes und Bits?

von yalu (Gast)


Lesenswert?

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

von Rolf Magnus (Gast)


Lesenswert?

> 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.

von Kloster (Gast)


Lesenswert?

Hall0!
danke für eure Antworten! Der Vorschlag von yalu war genau die Lösung 
meines Problems!
Guten Rutsch ins Neue Jahr allerseits!

von Kloster (Gast)


Lesenswert?

Zu Stefan B: steht in Jedem Array ein Nullbyte?

ist es das hier?:

XXX_text[4] = '\0';        // Stringende nach dem 4. Zeichen

von Kloster (Gast)


Lesenswert?

OK, Ich habs schon rausgefunden!

von Gast (Gast)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


Lesenswert?

<°)))o><

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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.

von Simon K. (simon) Benutzerseite


Lesenswert?

>> 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.

von Rolf Magnus (Gast)


Lesenswert?

>>> 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.

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Rolf Magnus (Gast)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.