Funkcja usuwająca substring

0

Witam. W moim programie wynikła konieczność użycia funkcji, która to usuwałaby jakiś podłańcuch tekstowy z innego łańcucha tekstowego. Napisałem więc takie coś:

char* strrem(char* source, int from, int to)
{
    if (from < 0 || to >= strlen(source) || to < from)
        return NULL;
    for (int i = 0; i < strlen(source) + 1; i++)
        source[from + i] = source[i + to + 1];
    return source;
}

O dziwo kod działa :-P . Jest tylko jeden kłopot. Jak się uchronić przed użytkownikiem który jako source poda mi stały łańcuch tekstowy? Np:

strrem("Ala ma kota i psa", 7, 13);

?

0

Hmm... jedyny pomysł, jaki mi na razie przychodzi do głowy, to przekazywać do funkcji: char **, czyli wskaźnik na tablicę charow. I operować bezpośrednio na tej tablicy. Wtedy "Ala ma kota" będzie nie poprawne, bo nie jest to wskaźnik i wywołanie będzie jakoś w stylu:

char * string = "ala ma kota";
/* ... = */ strrem(&string, 0, 3);
0

ale czym ty sie przjmujesz? jesli programista uzywa funkcji na stalym ciagu to najwyzej zaliczy segfaulta. to nie twoj problem, zreszta zadna z funkcji str*() ze string.h nie ma takiego zabezpieczenia.

[losowa nazwa] napisał(a)

Hmm... jedyny pomysł, jaki mi na razie przychodzi do głowy, to przekazywać do funkcji: char **, czyli wskaźnik na tablicę charow. I operować bezpośrednio na tej tablicy. Wtedy "Ala ma kota" będzie nie poprawne...

strrem((char**)&"ala ma kota",...) ?

0

Nie wiedziałem, że można używać & do podanych stringów ;)

0
MarekMotyl napisał(a)

strrem("Ala ma kota i psa", 7, 13);

napisales parametr typu char*.
osoba uzywajaca funkcji podala char const*.
nie powinna byla tego robic. kropka.
g++ mowi: x.cpp warning: deprecated conversion from string constant to 'char*'
wiec jak osoba uzywajaca Twojej funkcji to oleje, to jej problem..

1 użytkowników online, w tym zalogowanych: 0, gości: 1