2016-02-03 2 views
0

Как указано в документе g-wan, xbuf_repl заменяет все вхождения. Но мой установленный g-wan, выполняющий следующий код, заменил только первое совпадение совпадения.xbuf_repl не заменяет все вхождения

#include "gwan.h" 

int main(int argc, char* argv[]){ 

    xbuf_t *reply = get_reply(argv); 

    char str[ ] = "kjfdkkkkfldjfjfldkjdkkklfjworhg8kkkugpugulrghkkkr8g"; 
    xbuf_ncat(reply, str, sizeof(str)-1); 
    xbuf_repl(reply, "kkk", "((()))"); 

    return 200; 
} 

выход: kjfd ((())) kfldjfjfldkjdkkklfjworhg8kkkugpugulrghkkkr8g

Что случилось моего кода? Как обойти это?

+0

Какую версию G-WAN вы используете? – Kenigmatic

+0

что я имел в виду, что «документ» находится в xbuffer.h, строка 85: '// заменить все вхождения« старой »строки« новой »в буфере.' 'char * xbuf_repl (xbuf_t * ctx , char * old, char * newstr); ' извините, поскольку я не читал документ на официальном сайте. Pls обновляет строку в xbuffer.h соответственно. –

+0

Ах! Это объясняет, почему вы ожидали, что он заменит все случаи. К сожалению, если я исправлю комментарий в xbuffer.h, это никому не поможет. Я пользователь, как и вы, и это не открытый источник. :) – Kenigmatic

ответ

0

Согласно G-WAN API documentation. , ,

// replace the first occurence of the 'old' string by the 'new' string in the buffer 
char *xbuf_repl (xbuf_t *ctx, char *old, char *new); 

G-WAN также имеет этот API, который (как я только что узнал от ответа Джил) также только заменяет первое вхождение, но в пределах буфера, а не первого появления с начала буфера. , , ,

// same as above but using a range in the buffer 
char *xbuf_replfrto(xbuf_t *ctx, char *beg, char *end, char *old, char *new); 

Ответ Гила показывает, как вы можете использовать это, чтобы заменить ВСЕ вхождения в буфер.

Кен

0

В примере entity.c G-WAN, вы можете увидеть:

// escape '<' because it cuts the text 
    while(xbuf_replfrto(reply, pos, reply->ptr + reply->len - 13, "<", "&lt;")); 

Это while() делает очевидным, что один экземпляр заменяется на время, которое подтверждается G-WAN documentation:

// replace the first occurence of the 'old' string by the 'new' string in the buffer 
char *xbuf_repl (xbuf_t *ctx, char *old, char *new); 
+0

Hi Gil. Похоже, я ошибался в отношении xbuf_replfrto (...). Doh! Я обновлю свой ответ (и повышу ваш). – Kenigmatic

+0

что я имел в виду, что «документ» находится в xbuffer.h, строка 85: // замените все вхождения «старой» строки «новой» в буфере char * xbuf_repl (xbuf_t * ctx, char * old , char * newstr); извините, поскольку я не читал документ на официальном сайте. Pls обновляет строку в xbuffer.h соответственно. –

+0

Выполнено в кодовой базе; будут опубликованы со следующей версией. Обратите внимание, что веб-сайт задокументировал его «правильно»: http://www.gwan.ch/api утверждает: «заменить первое появление« старой »строки« новой »строкой в ​​буфере». – Gil

Смежные вопросы