Hallo ich habe mir ein kleines Programm geschrieben das mir als erstes meine Kommazahl aufteilt in Vor und Nschkommastelle.Anschliessend wandele ich diese beiden Int Zahlen in ASCII um.Nun möchte ich die einzelnen Strings miteinander verbinden.Dies funktioniert bis zu meinem letzten strncat.Da überschreibt mein zweiter String meinen ersten statt sie zu verbinden.Kann mir irgend jemand sagen wo mein Fehler liegt? [c] void GetFunktion2() { //1.0 float Zahl =256.8; char string[8]; char buf[2]; Uint16 NachkommaStelle =0; Uint16 Vorkommastelle =0; Float_To_INT(Zahl,&NachkommaStelle,&Vorkommastelle); INT_To_ASCII(Vorkommastelle,3,string); INT_To_ASCII(NachkommaStelle,1,buf); strncat(string,".",1); strncat(buf,",",1); strncat(string,buf,2); asm (" ESTOP0"); } [\c]
Wie groß ist buf? Und wie lang ist der String, den Du darin ablegen willst? Bedenke, daß ein String in C immer ein Byte mehr als die Nutzdaten benötigt. buf ist 2 Bytes groß. Du willst aber eine einstellige Nachkommastelle und ein Komma darin unterbringen ...
Dennis S. schrieb: > char string[8]; > char buf[2]; Merk dir eines: Bei Stringoperationen wird NIEMALS gekleckert, sondern "geklotzt was man sich gerade noch erlauben kann". Ein Array der Länge 2, ist beim Arbeiten mit Strings so gut wie nie sinnvoll, es sei dann, da kommt eine Konstante rein. Denn ein String mit 1 variablen Nutzzeichen benötigt man so gut wie nie. Und ob du temporä in einer Funktion ein paar Bytes mehr auf dem Stack allokieren lässt oder nicht, spielt in 99% aller Fälle auch keine Rolle mehr. > INT_To_ASCII(Vorkommastelle,3,string); > INT_To_ASCII(NachkommaStelle,1,buf); > > strncat(string,".",1); > strncat(buf,",",1); Soso. An einem String mit streln gleich 1, hängst du noch ein Zeichen drann. Damit muss das Array schon mindestens 3 Lang sein. 2 Zeichen + '\0'
Die Stringlänge von buf ist mit [2] zu kurz. Da das abschließende '\0' dazukommt, hast Du 3 Zeichen. buf ist nach string alloziert. kommt im Stack also direkt unterhalb. Beim
1 | strncat(buf,",",1); |
kommt das '\0' 1 Stelle hinter den für buf reservierten Raum, und das ist string[0]. Deshalb ist string beim nächsten strncat leer.
Besten dank an alle.Manchmal sieht man den Wald vor lauter Bäumen nicht.Und ich such jetzt schon seit 8 uhr meinen Fehler.
Dennis S. schrieb: > Manchmal sieht man den Wald vor lauter Bäumen > nicht. Muss bei C natürlich heißen: Manchmal sieht man den String vor lauter char[] nicht :-)
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.