string in Block zerlegen (ähnlich wie strtok)
-
wieso nicht strtok benutzen?
#include <stdio.h> #include <string.h> #include <stdlib.h> int* get_nums(char* src, int* nums) { char* token; token = strtok(src, "."); *nums=atoi(token); while(NULL != (token=strtok(NULL, "."))) { nums++; *nums = atoi(token); } return nums; } int main() { char ip[] = "129.322.22.44"; int nums[4], i; get_nums(ip, nums); for(i=0; i<4; ++i) printf("Zahl %d: %d\n", i, nums[i]); return 0; }
Und wenn die Quelle nach der Funktion sich nicht ändern darf
int* get_nums(const char* src, int* nums) { char* token; char* nsrc; if (NULL==(nsrc = (char*) malloc(strlen(src)+1))) { fprintf(stderr, "Cannot allocate memory\n"); return NULL; } strcpy(nsrc, src); token = strtok(nsrc, "."); *nums=atoi(token); while(NULL != (token=strtok(NULL, "."))) { nums++; *nums = atoi(token); } free(nsrc); return nums; }
-
supertux schrieb:
wieso nicht strtok benutzen?
er will's ja speedoptimiert haben haben.
Zuletzt bearbeitet von supertux am 18:46:30 03.09.2004, insgesamt 5-mal bearbeitet
benutzt du das board als editor?
-
net schrieb:
benutzt du das board als editor?
Ich wollte on the fly machen, dann wollte ich sicher gehen, dass mein Code auch stimmt. Dann hab ich es kompiliert und hatte Fehler. Dann habe ich gepostet und dann merkete ich, dass etwas besser gehen konnte, und dann habe ich nochmal gepostst, insgesamt 4 Mal.
@Illuminatic: wieso willst du die Standardfunktionen vermeiden?
-
@Illuminatic, ich würde an deiner Stelle strtok verwenden. Die Funktionen der Standardbibliothek sind zum großen Teil sehr gut optimiert. Der einzige Punkt, der meines Wissens gegen strtok spricht ist, dass man diese Funktion nicht in Verbindung mith Threads verwenden sollte.
-
Herrmann schrieb:
@Illuminatic, ich würde an deiner Stelle strtok verwenden. Die Funktionen der Standardbibliothek sind zum großen Teil sehr gut optimiert. Der einzige Punkt, der meines Wissens gegen strtok spricht ist, dass man diese Funktion nicht in Verbindung mith Threads verwenden sollte.
Aber ANSI C kennt keine Thraeds (http://www.c-plusplus.net/forum/viewtopic.php?t=83433&highlight=threads), um ehrlich zu sein, ich weiß gar nicht, was die berühmte Threads sind, jeder sprich davon aber ich hab sowas nie benutzt.
-
supertux schrieb:
Aber ANSI C kennt keine Thraeds...
....
...um ehrlich zu sein, ich weiß gar nicht, was die berühmte Threads sindkönnte es daran liegen, dass du ansi-c benutzt?
aber spass beiseite, mit programmiersprachen hat das wenig zu tun.
du bist ja linuxer oder (supertux)?
dafür gibt es das: http://pauillac.inria.fr/~xleroy/linuxthreads/
und pthreads (posix threads?), aber ansonsten kennt linux kein echtes multithreading d.h. die threads unter linux sind eigentlich abgespeckte prozesse (ich glaub erst kernel 2.6 hat echtes threading).
guckst du auch hier: http://www.mario-konrad.ch/index.php?page=30100
für eine einführung in pthreads
-
Herrmann schrieb:
@Illuminatic, ich würde an deiner Stelle strtok verwenden. Die Funktionen der Standardbibliothek sind zum großen Teil sehr gut optimiert. Der einzige Punkt, der meines Wissens gegen strtok spricht ist, dass man diese Funktion nicht in Verbindung mith Threads verwenden sollte.
aber doch nur wenn du zwei threads innerhalb eines prozesses hast, die die
funktion benutzern.
hast du nur einen thread der die funktion verwenden muss, kannst du bedenkenlos
strtok nehmen.
-
entelechie schrieb:
aber doch nur wenn du zwei threads innerhalb eines prozesses hast, die die
funktion benutzern.
hast du nur einen thread der die funktion verwenden muss, kannst du bedenkenlos
strtok nehmen.oder jeder thread hat eine eigene 'instanz' von strtok
strok ist ja eine recht einfache funktion (ich hatte schonmal den quelltext dafür hier irgendwo gepostet). man muss halt zusehen, dass man diesen internen static pointer los wird.
-
net schrieb:
supertux schrieb:
Aber ANSI C kennt keine Thraeds...
....
...um ehrlich zu sein, ich weiß gar nicht, was die berühmte Threads sindkönnte es daran liegen, dass du ansi-c benutzt?
aber spass beiseite, mit programmiersprachen hat das wenig zu tun.
du bist ja linuxer oder (supertux)?
dafür gibt es das: http://pauillac.inria.fr/~xleroy/linuxthreads/
und pthreads (posix threads?), aber ansonsten kennt linux kein echtes multithreading d.h. die threads unter linux sind eigentlich abgespeckte prozesse (ich glaub erst kernel 2.6 hat echtes threading).
guckst du auch hier: http://www.mario-konrad.ch/index.php?page=30100
für eine einführung in pthreadsJa, ich benutze meistens nur ANSI C.
Ja, ich bin linuxer. Aber wie gesagt, bisher kam ich mit meinen Programme gut zurecht und hab mich nie interessiert was die Threads sind.
-
Hallo,
danke für die vielen Antworten.
Nun zum Thema, ich möchrte keine ANSI C Funktion verwenden, da diese meist ausbremsen.Achso, das OS ist Linux :).
strtok ist meineserachtens nach sehr unflexibel. Mann kann zwar in dem Sinne splitten, jedoch nur unter Vorbehalt.
Ich nehm mal als Beispiel Perl (ich weiß, mit C nicht im Ansatz zu Vergleichen da Interpreter Sprache), dort gibt es die Funktion split, auch wenn diese nicht schnell ist, so ist sie doch recht flexibel.
Ich wollte eigentlich diese Funktion immitieren,optimieren unter C.
Nochmals Danke für die vielen Antworten.
Gruß Illu