Aktív témák

  • Jester01

    veterán

    válasz seaky77 #103 üzenetére

    Az elsõ két problémára gyári megoldás az strtok függvény. Ha az nem tetszik, kézzel valami ilyesmi lehet:

    char* nexttoken(const char** ptr, char delim)
    {
    char* ret = NULL;
    if (*ptr && **ptr)
    {
    int length;
    const char* start = *ptr;
    const char* end = strchr(start, delim);
    if (end == NULL)
    {
    length = strlen(start);
    *ptr = NULL;
    } else {
    length = end - start;
    *ptr = end + 1;
    }
    ret = malloc(length + 1);
    strncpy(ret, start, length);
    ret[length] = 0;
    }

    return ret;
    }


    Ha több delimiter van egymás után, akkor ez szépen üres stringeket fog visszaadni. A lista végén NULL-t kapsz, és minden visszaadott tokent neked kell free-vel felszabadítani (mint ahogy a 3. kérdésedben szereplõ strdup esetében is.)
    Mivel hossz paramétert nem adsz át, ezért a bemeneti string végén ott kell legyen a lezáró nulla byte különben nagy baj lesz :)

    Amúgy sokszor elég a token pozíciója és a hossza, ekkor megszabadulsz a memóriakezelés nyûgjétõl és gyorsabb is lesz.

    Elismerem, hogy egy split az egyszerûbb ;)

    [Szerkesztve]

    [Szerkesztve]

Aktív témák