Во-первых у тебя остается Memory Leak - это сразу видно, следи за комментариями обозначенным ^^^^^^^
> char code[0x5000], code2[0x5000], sz3[0x3000]; > > /*В переменной code содержится весь текст*/ > > char *sz = new char[0x3000]; ^^^^^^^^^^^^^^^^^^^ тут ты зарезервироал место и не высвободил, да и судя по коду, это тебе не к чему, можно было просто объявить char* sz;
> > UINT j = 0; > > if(strstr(code, "&")) > { > strcpy(code2, ""); > while(strstr(code, "&")) > { > j = (UINT)strstr(code, "&") - (UINT)code; > strncpy(sz3, code, j); > sz3[j] = 0; > strcat(code2, &sz3[0]); > strcat(code2, "amp"); > sz = strchr(code, '&')?strchr(code, '&') + 1:code; ^^^^^^^^^^^^^^^ вот тут ты меняешь адрес sz и теряешь возможность освободить память, поэтому строка char* sz = new char[0x3000]; не кчему.
> strcpy(code, sz); > } > strcat(code2, code); > } > > в переменной code2 обработанный текст > Можт я всё это не правильно сделал, но главное что этот код > работает!
Работать она вроде работает, хотя не пойму почему :-)))) шучу
Но ты видешь сколько у тебя лишних действий? в моем примере все делается "легким движением руки" и никакого мусора не остается в памяти.
и еще, для перестановки у тебя не хватит места, например весь текст у тебя полностью от и до "залит" символами '&', тогда как поступишь? Отсюда все сводится т "резиновому" буферу. Следует учитывать все случаи.
для солидного(коммерческого) кода тебе следует пересмотреть код, и к тому же у тебя данные собираются в переменную code2, а если у тебя в тексте вообще не будет символа '&', то code2 не понятно что будет в себе содержать. Хотя бы дописал так
if(strstr(code, "&"))
{
..............
}
else
{
strcpy(code2, code);
}
Все. Удачи
|