Rolf B: C Pointerei

Beitrag lesen

Hallo pl,

Hast Du eine Altenative zu strtok() ?

Hm. Ich muss erstmal verstehen was Du tust. Sieht so aus, als würdest Du einen String, der Punkte enthält, an den Punkten teilen. Und dann vor jedes Fragment die Länge setzen. Also

"Hallo.Welt.Der.Zahlen" wird zu "\x05Hallo\x04Welt\x03Der\x06Zahlen".

Richtig?

In dem Fall würde ich an Position strlen(qname)+1 beginnen und rückwärts laufen. Zeichen werden gezählt und wenn Du einen Punkt in qname findest, schreibst Du nicht den Punkt, sondern den Zähler und setzt den Zähler auf 0. Wenn Du durch bist, schreibst Du den letzten Zählerstand auf query[0].

Hab mal das hier ausprobiert:

#include <stdio.h>
#include <string.h>

int main()
{
    char query[512] = "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
    //             0....:....1....:...
    char* qname = "forum.selfhtml.org";
    //            0....:....1....:...
    int p = strlen(qname)+1;
    char z = 0;
    for (int i=p-1; i>0; i--) {
        char c = qname[i-1];
        if (c == '.') {
            c = z;
            z = 0;
        } else {
            z++;
        }
        query[i] = c;
    }
    query[0] = z;
    query[p] = 0;
    query[p+1] = 0;
    query[p+2] = 1;
    query[p+3] = 0;
    query[p+4] = 1;
    printf("Result: p=%d, %s\nHex: ", p, query);
    for (int i=0; i<=p+4; i++) {
        printf("%02x ", query[i]);
    }
    return 0;
}

PS: Was mich nervt ist, daß C den Little Endian bevorzugt.

Tut es nicht. Dein Intel-Prozessor tut das. Nimm einen IBM Großrechner oder einen Motorola 68xxx Prozessor, die sind Big Endian.

Rolf

--
sumpsi - posui - clusi