Bestimmten Bereich aus einem String auslesen in C

#5740086
Lesenswert?

Hallo,
ich habe mich hier gerade neu angemeldet. Hoffe, dass ich hier richtig 
mit meinem Thema bin :)
habe schon alle möglichen Seiten im Internet durchsucht, bin aber leider 
nicht fündig geworden.
Habe vor kurzem angefangen mich mit der Programmiersprache C zu 
befassen.

Ich habe folgendes vor.

Ich habe einen UDP Server gebastelt und möchte den ankommenden String

String = "aaabbbcccdddeeefff"

in Einzelteile zerlegen.

Es sollen...

String1 = "aaa"
String2 = "bbb"
String3 = "ccc" usw. zugeordnet werden.

Ich kriege das einfach nicht gebacken. Hoffe mir kann hier jemand 
helfen.
#5740171
Lesenswert?

Danke für die Antworten!

habe das jetzt folgendermaßen gelöst.

    char String[100]="abc:def:ghi:jkl";
    char delm[5]=":";

    char *s1;
    char *s2;
    char *s3;
    char *s4;

    s1 = strtok(String, delm);
    s2 = strtok(NULL, delm);
    s3 = strtok(NULL, delm);
    s4 = strtok(NULL, delm);

    printf("%s\n", s1);
    printf("%s\n", s2);
    printf("%s\n", s3);
    printf("%s\n", s4);

ist vielleicht nicht die eleganteste Lösung, aber funktioniert.
#5740177
Lesenswert?

Ich weiß nicht wie genau du die Doku gelesen hast, aber folgende Dinge 
sollten dir bewusst sein.

strtok ändert String und fügt \0 Zeichen ein. Wenn du am Ende ein printf 
von String machst könnte das Ergebnis überraschend sein.

Gibt es weniger als 3 Trennzeichen, dann sind die sX Pointer zum Teil 
Null. Für printf ist das Verhalten dann undefiniert, es darf also jeder 
Compiler machen was er will.
#5740185
Lesenswert?

Folgeadermassen funktioniert es auch...

    char stt[100]="abcdefghijkl";
    char st1[5]="";
    char st2[5]="";
    char st3[5]="";
    char st4[5]="";

    strncpy(st1, stt, 3);
    strncpy(st2, stt+3, 3);
    strncpy(st3, stt+6, 3);
    strncpy(st4, stt+9, 3);

    printf("%s\n", st1);
    printf("%s\n", st2);
    printf("%s\n", st3);
    printf("%s\n", st4);

Ich sehe mich eher als Programmieranfänger, deswegen habe ich mich auch 
hier angemeldet ;)

Wenn jemand eine bessere Idee hat, dann möge er sie bitte mitteilen.
#5740216
Lesenswert?

ist das so richtig?

    char stt[100]="abcdefghijkl";
    char st1[5]="";
    char st2[5]="";
    char st3[5]="";
    char st4[5]="";

    strncpy(st1, stt, 3);
    strncpy(st2, stt+3, 3);
    strncpy(st3, stt+6, 3);
    strncpy(st4, stt+9, 3);

    st1[3] = '\0';
    st2[3] = '\0';
    st3[3] = '\0';
    st4[3] = '\0';

    printf("%s\n", st1);
    printf("%s\n", st2);
    printf("%s\n", st3);
    printf("%s\n", st4);
Gast #5740402
Lesenswert?

Wilhelm V. schrieb:
> Bis jetzt habe ich mit Pascal und python programmiert, aber C ist echt
> eine andere Hausnummer muss ich sagen

Warum tust Du Dir denn das an? Mit C kannst Du nicht mehr, nur 
komplizierter! Ist es beruflich und hast keine andere Wahl? C wurde 
damals erfunden um:

- wenig Speicher zu benötigen
- absichtlich kompliziert zu sein

Und es gibt heute keinen Grund mehr, sich damit zu quälen. Hier im Forum 
ist es sogar sehr gefährlich eine Frage bezüglich C zu stellen, oder die 
Programmiersprache auch nur in Frage zu stellen!

Glaubst Du mir nicht? Schau Dir die Bewertungen zu diesem Beitrag in 
einer Stunde an!

Hier wollen sich ein paar Leute nur profilieren, wie gut sie denn C 
können!

Gruss Chregu
#5740887
Lesenswert?

Christian M. schrieb:
> Warum tust Du Dir denn das an? Mit C kannst Du nicht mehr, nur
> komplizierter! Ist es beruflich und hast keine andere Wahl? C wurde
> damals erfunden um:
>
> - wenig Speicher zu benötigen
> - absichtlich kompliziert zu sein

Ich mache das Hobbymäßig und ich liebe Herausforderungen ;)
Mein Projekt zur Zeit ist ein Raspberry Pi Roboter, den ich per UDP 
Client (Handy App), den ich mit Android Studio gebastelt habe steuere.

Warum habe ich mich für C entschieden?

Nun ja, ich habe mir mit C einen UDP Server gebastelt und im Vergleich 
zu dem Server gestellt, den ich mit Python programmiert habe. Beim 
testen habe ich festgestellt, dass der Server den ich mit C programmiert 
habe deutlich schneller läuft als der mit Python programmierte. 
Seltsamerweise ist es so, dass je mehr Nachrichten an den UDP Server 
(Python) ankommen, desto langsamer wir er.

Kann auch sein, dass ich vielleicht auch was nicht 100%ig beim Python 
Server optimiert habe, obwohl ich es eigentlich in allen möglichen 
Variationen getestet habe.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren