Здрасьте, пишу функцию для экранирования кастомных символов для собственного сетевого протокола. Алгоритм, до боли прост: в цикле проверяем каждый символ строки и копируем его в новую строку, если символ помечен как служебный, то сначала копируем символ " \", а затем сам символ.
И вроде бы все написано правильно, но между символами появляются странные символы. К примеру, я экранирую два слова: CONN и OK, на выходе получаю
это.
Код функции:
char *result = "", *temp, s;
for(int i = 0; i < strlen(string); i++) {
s = string[i];
temp = result;
// Если найден спец. символ
if((s == ':' || s == '$') && s != '\r' && s != '\n') {
// Выделяем доп. память и копируем туда два символа
result = new char[strlen(temp) + 2];
strcpy(result, temp);
strcat(result, "\\"); // Первый символ
strcat(result, &s); // Второй символ
} else {
// Копируем текущий символ без изменений
result = new char[strlen(temp)];
strcpy(result, temp);
strcat(result, &s);
}
}
free(temp);
printf("%s\n", result);
return result;
OS: Ubuntu 14.01
IDE: Eclipse Luna
Компилятор: g++
P.S. Кстати подскажите пожалуйста как правильно очистить память в таком цикле. Спасибо.