Robert B.: C Pointerei

Beitrag lesen

Moin,

also ich hab da eine Funktion:

// Serialize Nameserver Query
int serNSQuery(char *query, char *qname, Sho type, Sho class){
    char *tok = ".";

… und du hast ein konstantes Token, das nicht als const deklariert ist:

const char tok[] = ".";
    char *pch = NULL;
    pch = strtok(qname, tok);

… Und du hast da eine Funktion, die man mit Vorsicht verwenden sollte …

    int i = 0;

… sowie einen Array-Index eines vorzeichenbehafteten Datentyps

    for( ; pch != NULL; pch = strtok(NULL, tok)){
        Oct len = strlen(pch);

… eine Umdefinition des Datentyps size_t oder einen möglichen Integer-Überlauf …

        query[i] = len;
        memcpy(&query[i+1], pch, len);
        i += 1 + len;
    }
    query[i] = 0;     // Terminiern
    query[i+1] = 0;
    query[i+2] = 1;   // type A
    query[i+3] = 0;
    query[i+4] = 1;   // class IN
    int qlen = i + 5; // Länge der Query

    return qlen;
}

und damit ein Problem beim Aufruf.

Eins? Mehrere, siehe oben.

Setze ich

    char query[512];
    char qname[] = "example.org";
    int qlen = serNSQuery(query, qname, 1, 1);

funktioniert alles, wenn ich jedoch die Funktion mit serNSQuery(query, "example.org", 1, 1) aufrufe, schmiert die exe ab (es compliliert also). Was hab' ich nicht verstanden!?

strtok

Viele Grüße
Robert