Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > strrepl


Автор: Opik 5.10.2005, 14:04
Есть код
Код

strrepl(to_out,16384,"[MESSAGE]",body);

если в body встречается [MESSAGE], то происходит зацикливание... как программно заменить только 1 раз? остальные - игнорировать?

Автор: Opik 5.10.2005, 14:24
Код

char *strrepl(char *Str, size_t BufSiz, char *OldStr, char *NewStr) {
        int OldLen, NewLen;
        char *p, *q;
        //if(NULL == (p = strstr(Str, OldStr)))
        //return Str;
        p = strstr(Str, OldStr);
        q = p;
        //just additional checker, to avoid unfin. loop.
        int cycles = 0;
        while (p!=NULL && (cycles <150)) {
                OldLen = strlen(OldStr);
                NewLen = strlen(NewStr);
                if ((strlen(Str) + NewLen - OldLen + 1) > BufSiz)
                        return NULL;
                memmove(q = p+NewLen, p+OldLen, strlen(p+OldLen)+1);
                memcpy(p, NewStr, NewLen);
                p = p+NewLen;
                p = strstr(Str, OldStr);
                cycles++;
        }
        return q;
}

Добавлено @ 14:24
думал функция встроенная... а вот..)) буду думать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)