Wie Teilstrings aus String bekommen???
-
Wenn die Teilstrings ohnehin zu Integer umgewandelt werden sollen, würde ich auch in Betracht ziehen, den Gesamtstring nach Int zu wandeln, und die (offensichtlich zweistelligen) Teilinteger mittels Schleife, /10 und %10 zu extrahieren. Könnte evtl. schneller sein.
-
beta4881 schrieb:
teilstring1=ganzerstring(1-2); // Zeichen 1 und 2
so wird das nicht funktionieren weil
-du musst 3 byte speicherplatz reservieren (+1 für NUL wenn du die ersten beiden zeichen haben willst) also:
char teilstring[3];
-mit strncpy musst du diese dann anhängen, also
strncpy(teilstring,ganzerstring,2);
bzw. teilstring[0]=0; und dann per
strncat(teilstring,ganzerstring,2);
anhängen.
-
TactX schrieb:
Wenn die Teilstrings ohnehin zu Integer umgewandelt werden sollen, würde ich auch in Betracht ziehen, den Gesamtstring nach Int zu wandeln, und die (offensichtlich zweistelligen) Teilinteger mittels Schleife, /10 und %10 zu extrahieren. Könnte evtl. schneller sein.
oder so (für zweistellige zahlen)
#define GET_NUMBER(p) (10*(*(p)-'0')+*((p)+1)-'0') ... char *s = "1234567890"; printf ("%d\n", GET_NUMBER(s+7)); // die 89 extrahieren ...
könnte sogar noch schneller sein
-
Stimmt.
-
ten schrieb:
könnte sogar noch schneller sein
am schnellsten meinst du wohl, denn jeder *gescheite* compiler evaluiert bei stringkostanten diesen makrocode gleich zur compile time.
-
c.rackwitz schrieb:
ten schrieb:
könnte sogar noch schneller sein
am schnellsten meinst du wohl, denn jeder *gescheite* compiler evaluiert bei stringkostanten diesen makrocode gleich zur compile time.
richtig, und bei variablen strings wird raketenmässig schneller und kurzer code erzeugt. so ein makro sieht zwar hässlich und unlesbar aus, aber man kann sich dran gewöhnen.
(jedenfalls wenn man schwachbrüstige microcontroller beharkt und ähnliche makros öfter coden muss)
-
Ich danke euch für die kompetente und rasche Hilfe! Das hat mich eine ganze Ecke weitergebracht!
-
beta4881 schrieb:
Ich danke euch für die kompetente und rasche Hilfe! Das hat mich eine ganze Ecke weitergebracht!
kein problem, dafür sind wir ja da
-
Hallo!
Ich habe folgendes Problem:
In meinem Programm erhalte ich einen String der so aussieht: "Datum;Nutzer;"
In einem Unterprogramm wollte ich jetzt mittels While-schleife die einzelnen Daten aus dem String extrahieren.
In der Schleife habe ich einen String mit result, indem ich die aktuelle Info ablegen wollte. Jedoch erhalte ich folgendes:
Ist das Datum kürzer als der Nutzername, dann wird beim Schleifendurchlauf (wenn der Nutzer extrahiert wird) an den Nutzernamen einfach die übrigen Zeichen des Datums angehängt.
Bsp: "01.07;Bene" --> "01.07" , "Ben07"
Muss ich irgendwas beachten? sollte ich den String löschen? aber wie?
Wenn ich mit null den string "lösche", dann kann das kopieren nicht gehen, oder?Wäre nett, wenn ihr mir helfen könntet.
mfg Bene
-
die funktion, die in den string result schreibt (oder erst recht wenn du einfach nur zeichen für zeichen einliest) schliesst den string anscheinend nicht mit '\0' ab. da das nächste NUL zeichen im speicher eben hinter "07" folgt wird eben bis dahin ausgegeben. du musst also entweder den string von hand abschliessen
string[n]=0;
oder du verwendest funktionen wie strncat die das von allein tun. du könntest auch vor jedem einlesen per memset alle zeichen auf '\0' setzen und dann zeichen für zeichen einlesen und (sofern das letzte element nicht überschrieben wird) brauchst du dir um die nullterminierung keine sorgen mehr zu machen.
-
Vielen Dank!
Habe es gerade ausprobiert, und es hat wunderbar geklappt!
Danke
mfg Bene