Toon posts:

[c] strings bewerken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het maken van een ftp client. Nu ben ik bezig met het maken van een browser voor de lokale schijf.
Ik heb een path zoals "/dev/luuk/test". Om het browsen te laten werken moet ik uit deze string /dev/luuk kunnen halen. Alleen "test" eruitplukken is al gelukt. De laatste / kan ik er ook uitkrijgen alleen de tekens daarvoor dus niet.

ik heb dit al geprobeert.
code:
1
2
3
4
5
char *buf = "Hello  there,stranger";
char **bp = &buf;
char *tok;
while (tok = strsep(bp, " ,"))
printf("tok = `%s'\n", tok);

een voorbeeld van internet wat dus op een segmentation fault loopt.
Op google heb ik ook geen duidelijk voorbeeld kunnen vinden, wel wat er in de buurt komt maar nooit het goede. Ik krijg het er zelf ook niet uit.
Zelfs verschillende C boeken gaven geen oplossing.
Iemand enig idee?

Verwijderd

Topicstarter
toch nog eruitgekomen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main(int argc, char **argv)
{
    char *s = "aaaa/bbbb";
    char *r;
    char **sp = &s;
    char *tmp;

    tmp = strdup(s);

    if (tmp == NULL) {
        printf("out of memory\n");
        return 0;
    }

    sp = &tmp;
    r = strsep(sp, "/"); /* this works */
}

  • johnwoo
  • Registratie: Oktober 1999
  • Nu online

johnwoo

3S-GTE

Een wat handiger (al is dat wellicht persoonlijk ;)) methode om alles tot de laatste slash te krijgen, is eerst te zoeken naar de laatste slash, en die geheugenlocatie vervolgens op 0 te zetten, zodat de string daar in feite eindigt:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(int argc, char *argv[]) {
    char *path, *lastslash, *buf = "/dev/blaat/immers";

    path = strdup(buf);
    if (lastslash = strrchr(path, '/')) {
        *lastslash = 0;
        printf("Het pad is %s\n", path);
    } else {
        printf("Er zit geen slash in je pad!\n");
    }
    free(path);

    return 0;
}

Dit zal Het pad is /dev/blaat printen.

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1